を使用して別のアプリケーションを起動するスクリプトがありますnohup my_app &
が、最初のスクリプトが終了すると、起動されたプロセスもダウンします。それが実行されて以来、私の理解によれば、それnohup
は起こらないはずです。元のスクリプトも nohup で呼び出されます。
何がうまくいかなかったのですか?
何年にもわたって正常に使用され、nohup を呼び出した後に常に終了する非常に信頼性の高いスクリプトは、次の構成を使用します。
nohup ${BinDir}/${Watcher} >${DataDir}/${Watcher}.nohup.out 2>&1 &
おそらく問題は、出力が管理されていないことですか?
nohup は、(親) プロセスが強制終了されたときに (子) プロセスがまだ実行されていることを意味するものではありません。nohup は、ssh 経由でサーバーに接続し、そこでプロセスを開始するときに使用されます。ログアウトすると、プロセスは終了します (ログアウトすると、シグナル SIGHUP がプロセスに送信され、プロセスが終了します)、nohup を使用してこの動作を回避し、ログアウトしてもプロセスは実行されています。
親プロセスが終了してもバックグラウンドで実行されるプログラムが必要な場合は、デーモンを使用してみてください。
my-app
独自のシグナルマスクを設定する可能性があります。nohup
がハングアップ シグナル SIGHUPを無視し、これがターゲット プログラムに継承されることはおそらくご存じでしょう。そのターゲット プログラムが独自のシグナル処理を行う場合、SIGHUP をたとえば SIG_DFT - デフォルト アクション (死ぬ) に設定している可能性があります。
確認するには、コマンドでstrace -f -o out
ortruss -f -o out
を実行します。これにより、「out」というファイル内のすべてのカーネル呼び出しが得られます。シグナルマスクが変更されている場合は、それを見つけることができるはずです。