ログアウト時にカーネルが私のプロセスを拒否するのはなぜですか?

ログアウト時にカーネルが私のプロセスを拒否するのはなぜですか?

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

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

  1. 15秒間寝ます。
  2. 「こんにちは」を印刷してください。
  3. / tmpに空のファイルを作成します。

それでは、プロセスを実行してから、ctrl-z、bg、拒否、およびログアウトを実行してみましょう。

15秒後、/ tmpの空のファイルはもう存在しません。 2番目のコマンド(印刷)を削除するとプロセスが終了し、空のファイルがあるため、プロセスがシェルが接続されていない状態でstdoutに何かを送信すると、カーネルからシグナルを受け取り、それを終了します。

プロセスはPerl、PHP、またはCになければなりません(BashまたはPythonでは発生しないようです)。

バックグラウンド実行にnohupを使用すると、出力がファイルに送信され、この問題に直面しないことがわかります。しかし、問題は、いくつかの出力を持つプロセスを実行するときのdisownコマンドの動作を理解することです。 (BTW、-h拒否を使用すると同じ結果が表示されます)。

答え1

あなたのプロセスはによって異なりますSIGTTOU

これが発生しないようにするには、所有していないTTYに何かを印刷しないように注意する必要があります。

関連情報