Shell

使用關閉按鈕關閉終端和 Ctrl-D 之間的區別

  • September 6, 2015

當我啟動後台程序然後使用視窗的關閉按鈕關閉終端時,後台程序被終止。Ctrl但是,如果我使用+關閉終端D,後台程序將繼續執行:

sam@Sam-Pc:~$ yes > /dev/null &
[1] 10219
// I then close the terminal a reopen a new one
sam@Sam-Pc:~$ ps aux | grep yes 
sam      10295  0.0  0.0  15948  2152 pts/8    S+   00:54   0:00 grep --color=auto yes

現在使用Ctrl+D關閉終端:

sam@Sam-Pc:~$ yes > /dev/null &
[1] 10299
sam@Sam-Pc:~$Ctrl-D
// I then reopen a new terminal
sam@Sam-Pc:~$ ps aux | grep yes 
sam      10219 99.4  0.0  11404   812 ?        R    00:52   2:01 yes
sam      10295  0.0  0.0  15948  2152 pts/8    S+   00:54   0:00 grep --color=auto yes

有人可以解釋這種行為嗎?

謝謝!

如果您使用關閉按鈕關閉視窗,則 SIGHUP 會由 shell 發送到後台程序,當終端關閉時也會接收 SIGHUP。程序的正常響應是退出,因此後台作業將被關閉。

另一方面,如果您按Cntl+ D,則不會發送任何信號,而是在 STDIN 上指示 EOF(文件結尾),並且外殼(和終端)關閉。EOF 基本上意味著我們已經結束了 STDIN,沒有更多的輸入。由於 EOF 不會觸發與後台作業相關的任何響應,因此它們將繼續進行。

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