2

を使用して別のアプリケーションを起動するスクリプトがありますnohup my_app &が、最初のスクリプトが終了すると、起動されたプロセスもダウンします。それが実行されて以来、私の理解によれば、それnohupは起こらないはずです。元のスクリプトも nohup で呼び出されます。

何がうまくいかなかったのですか?

4

3 に答える 3

1

何年にもわたって正常に使用され、nohup を呼び出した後に常に終了する非常に信頼性の高いスクリプトは、次の構成を使用します。

nohup ${BinDir}/${Watcher} >${DataDir}/${Watcher}.nohup.out 2>&1 &

おそらく問題は、出力が管理されていないことですか?

于 2012-08-23T14:12:48.770 に答える
1

nohup は、(親) プロセスが強制終了されたときに (子) プロセスがまだ実行されていることを意味するものではありません。nohup は、ssh 経由でサーバーに接続し、そこでプロセスを開始するときに使用されます。ログアウトすると、プロセスは終了します (ログアウトすると、シグナル SIGHUP がプロセスに送信され、プロセスが終了します)、nohup を使用してこの動作を回避し、ログアウトしてもプロセスは実行されています。

親プロセスが終了してもバックグラウンドで実行されるプログラムが必要な場合は、デーモンを使用してみてください。

于 2012-08-23T14:09:29.580 に答える
0

my-app独自のシグナルマスクを設定する可能性があります。nohupがハングアップ シグナル SIGHUPを無視し、これがターゲット プログラムに継承されることはおそらくご存じでしょう。そのターゲット プログラムが独自のシグナル処理を行う場合、SIGHUP をたとえば SIG_DFT - デフォルト アクション (死ぬ) に設定している可能性があります。

確認するには、コマンドでstrace -f -o outortruss -f -o outを実行します。これにより、「out」というファイル内のすべてのカーネル呼び出しが得られます。シグナルマスクが変更されている場合は、それを見つけることができるはずです。

于 2012-08-23T15:26:39.420 に答える