SIGHUP(または同様)を使用してシェルログアウトが発生したときにdisownで実行されるプロセスの動作を理解したいと思います。
このプロセスは単に次のことを行います。
- 15秒間寝ます。
- 「こんにちは」を印刷してください。
- / tmpに空のファイルを作成します。
それでは、プロセスを実行してから、ctrl-z、bg、拒否、およびログアウトを実行してみましょう。
15秒後、/ tmpの空のファイルはもう存在しません。 2番目のコマンド(印刷)を削除するとプロセスが終了し、空のファイルがあるため、プロセスがシェルが接続されていない状態でstdoutに何かを送信すると、カーネルからシグナルを受け取り、それを終了します。
プロセスはPerl、PHP、またはCになければなりません(BashまたはPythonでは発生しないようです)。
バックグラウンド実行にnohupを使用すると、出力がファイルに送信され、この問題に直面しないことがわかります。しかし、問題は、いくつかの出力を持つプロセスを実行するときのdisownコマンドの動作を理解することです。 (BTW、-h拒否を使用すると同じ結果が表示されます)。
答え1
あなたのプロセスはによって異なりますSIGTTOU
。
これが発生しないようにするには、所有していないTTYに何かを印刷しないように注意する必要があります。