バックグラウンドプロセスを起動し、ウィンドウの閉じるボタンを使用してターミナルを閉じると、バックグラウンドプロセスが強制終了されます。ただし、を使用してターミナルを閉じると 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はシェルによってバックグラウンドプロセスに送信され、シェルは端末が閉じるときにSIGHUPも受信します。プロセスの通常の応答は終了することであるため、バックグラウンドジョブは閉じられます。
一方、を押すと Cntl + D、信号は送信されず、EOF(ファイルの終わり)がSTDINに示され、シェル(および端末)が閉じます。EOFは、基本的に、 STDINの終わりに達したので、入力するものはこれ以上ありません。EOFは、バックグラウンドジョブに関連する応答をトリガーしないため、継続します。