web-dev-qa-db-ja.com

ログアウトすると、カーネルがプロセスを勘当して強制終了するのはなぜですか?

シェルログアウトからのSIGHUP(または同様のもの)が発生したときのdisownで実行されているプロセスの動作を理解したいと思います。

このプロセスは、単に次のことを行います。

  1. 15秒寝る
  2. 印刷 "こんにちは";
  3. / tmpに空のファイルを作成します

OK、プロセスを実行してから、ctrl-z、bg、disown、logoutを実行します。

15秒後、/ tmp内の空のファイルは存在しません。 2番目のコマンド(print)を削除すると、プロセスは終了し、空のファイルが存在します。したがって、プロセスがシェルを接続せずにstdoutに何かを送信すると、カーネルからシグナルを受信して​​それを強制終了します。

プロセスはPerlである必要があります、PHPまたはC(BashまたはPythonは発生しないようです)

Nohupを使用したバックグラウンド実行で出力がファイルに送信され、この問題が発生しないことはわかっていますが、問題は、出力を使用してプロセスを実行したときのdisownコマンドの動作を理解することです。 (ところで、-hで勘当しても同じ結果になります)。

3
Javier Tacón

プロセスがSIGTTOUで終了しました。

これを防ぎたい場合は、所有しなくなったTTYに何かを印刷しないように注意する必要があります。

3
schily