我在终端中运行了一个带有无限 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
命令。