后台进程未运行?

后台进程未运行?

我在终端中运行了一个带有无限 while 循环的 C 程序,并观察到其中一个 CPU 核心的使用率达到 100%。当我使用Ctrl+将其变成后台进程时z,CPU 使用率突然下降到 < 10%。使用htop,我发现该进程使用了​​ 0% 的 CPU。过程中发生了什么?

该程序

int main()
{
    int i;
     while( 1 )
    { }
    return 0;
}

由于程序中不涉及 I/O,我对程序做了一些小改动,看看 I/O 等待是否增加了使用率,但得到了相同的结果(0% 使用率)。

int main()
{
    int i;
     while( i+1 ) // wait to retrieve i
    {
        i = 1; 
    }
    return 0;
}

过程中发生了什么?正在运行吗?

答案1

当您在终端中按Ctrl+时z,SIGTSTP 会发送到前台运行的任务的进程组。

SIGSTP 的默认操作是停止(即挂起)进程:

     18    SIGTSTP      stop process         stop signal generated from keyboard

如果您希望进程在后台恢复运行,可以使用 shell-builtin bg(background 的缩写)。如果希望进程恢复在前台运行,可以使用该fg命令。

相关内容