web-dev-qa-db-ja.com

閉じるボタンを使用して端末を閉じることと、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

誰かがこの行動を説明できますか?

ありがとう!

7
Sam Bruns

閉じるボタンを使用してウィンドウを閉じると、SIGHUPはシェルによってバックグラウンドプロセスに送信され、シェルは端末が閉じるときにSIGHUPも受信します。プロセスの通常の応答は終了することであるため、バックグラウンドジョブは閉じられます。

一方、を押すと CntlD、信号は送信されず、EOF(ファイルの終わり)がSTDINに示され、シェル(および端末)が閉じます。EOFは、基本的に、 STDINの終わりに達したので、入力するものはこれ以上ありません。EOFは、バックグラウンドジョブに関連する応答をトリガーしないため、継続します。

10
heemayl