3

Windows (7) では、VC++ で「プロセス シャットダウン パラメーター」を設定できます (XP では、親プロセスは子プロセスの前に自動的にシャットダウンされます)。

GetProcessShutdownParameters(&shutdownlevel, &shutdownflags);
SetProcessShutdownParameters(shutdownlevel+1, SHUTDOWN_NORETRY);

Linux (gcc) 上の C++ でこれを行う方法は? 多くのフォーラムで、親プロセスが停止した場合 (Linux での prctl の使用など) に子プロセスを確実に強制終了する方法について多くの議論が見られますが、親プロセスが OS によって強制終了されたことを保証する方法については何も見つかりませんでした。上記のWindowsのように、子プロセスの前。Linuxでは自動ですか?

4

1 に答える 1

0

Unix の世界でのシステムのシャットダウンは、動作が少し異なります。

システムがシャットダウンされると、最初にシャットダウン スクリプトが呼び出され、複雑なタスクや時間のかかるタスクが処理されます。スクリプトが実行されると、残りのすべてのプロセスに最初にSIGTERMシグナルが送信されます明示的なハンドラーがある場合)、数秒後にSIGKILLシグナル (プロセスを強制終了し、処理できない場合) が送信されます。

最後の部分が発生する順序は定義されていません。

一般に、プログラムは単に送信するだけでシャットダウンできるように作成する必要がありますSIGTERM

親は単に子を再起動するだけなので、子の前に親を停止したいと思います。これを回避する適切な方法は、子の終了ステータスを収集することです(とにかくあなたが責任を負います)。終了ステータスが送信されたためにプロセスが終了したことを示している場合、再起動を避けますSIGTERM

SIGKILLシステムがメモリ不足になったときに最大のプロセスに発生するため、 で再起動する必要があります)

于 2013-07-16T08:32:14.503 に答える