Shell
使用關閉按鈕關閉終端和 Ctrl-D 之間的區別
當我啟動後台程序然後使用視窗的關閉按鈕關閉終端時,後台程序被終止。
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 不會觸發與後台作業相關的任何響應,因此它們將繼續進行。