Process

為什麼當我用 CTRL-Z 停止睡眠命令程序時,它仍在後台執行?

  • July 21, 2021

我要做的是:

sleep 5 

並立即CTRL-Z所以當我打開時,jobs我看到:

[1]+  Stopped                 sleep 5

接下來當我做fg %1睡眠過程不再執行時,它已經完成了,這意味著它正在執行那 5(也許是 4?)秒Stopped。為什麼?

該實用程序呼叫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.  */

引用自:https://unix.stackexchange.com/questions/658914