为什么当我用 CTRL-Z 停止时 sleep 命令进程仍在后台运行?

pjk*_*pjk 9 process jobs background-process

我要做的是:

sleep 5 
Run Code Online (Sandbox Code Playgroud)

并立即CTRL-Z所以当我打开时,jobs我看到:

[1]+  Stopped                 sleep 5
Run Code Online (Sandbox Code Playgroud)

接下来,当我执行fg %1sleep 过程不再运行时,它已完成,这意味着它在运行 5(也许 4?)秒的同时运行Stopped。为什么?

Art*_*nov 5

该实用程序xnanosleep()调用又调用 Linux 内核nanosleep()系统调用。无论应用程序处于运行/停止状态如何,它都可以工作,但是当应用程序停止时,它无法退出,这意味着当您取消暂停它时,它会退出。

https://linux.die.net/man/2/nanosleep

至于Ctrl+Z它发送一个键盘停止信号,该信号可以被应用程序拦截,但在这种情况下,它不会完成,因为nanosleep()无论如何,再次都会起作用。

/usr/include/bits/signum-arch.h

#define SIGSTOP         19      /* Stop, unblockable.  */
#define SIGTSTP         20      /* Keyboard stop.  */
Run Code Online (Sandbox Code Playgroud)