exit でターミナルを閉じた後もコマンドが実行され続けるのはなぜですか?

exit でターミナルを閉じた後もコマンドが実行され続けるのはなぜですか?

なぜcommand & exitターミナルで(のようにvimiv & exitヴィミヴターミナルが閉じられても実行し続ける?私は予想していたヴィミヴ現在の端末でバックグラウンドジョブとして開始し、その後サインアップターミナルが閉じられ、終了するとき。たとえば、vimiv &別のexitコマンドを実行すると、ヴィミヴ閉店します

答え1

私は、vimiv が現在のターミナルでバックグラウンド ジョブとして開始され、ターミナルが閉じられて終了するときに sighup を受信することを期待していました。

いいえ、そうではありません。カーネルからシグナルをvimiv受け取るのは、SIGHUP前景仕事だったとしても、停止バックグラウンド ジョブ。ただし、どちらでもありません。実行中のバックグラウンド ジョブです。

または、bash (特定の bash であり、一般的なシェルではありません) 自体がシグナルを受信し、それをすべての非拒否ジョブに再送信した場合。ただし、あなたの例では、シェルは[1]によってSIGHUPシグナルがexit送信されたからではなく、を介して正常に終了します。SIGHUP

例えば、vimiv &別のexitコマンドを実行すると、vimiv閉じます

vimiv &これはそのプログラムに特有のことかもしれません。ターミナルの別の行にxclock &と を入力しても、は終了しません。ただし、 ボタンでターミナルを閉じると、 は終了します。その場合、は信号を受信し、 に再送信するからです。exitxclockXbashSIGHUPxclock

[1] bash はSIGHUP正常終了時に を送信することもできますが、 の場合のみでありshopt -s huponexit、これはデフォルトではありません。

関連情報