Linuxの終了ステータスとSIGCHLD
の違いは何ですか?wait()SIGCHLDと終了ステータス
子供が終了すると、によってブロックされたSIGCHLD
シグナルが送信されます(なぜなら、子供の終了ステータスが必要なのでしょうか? SIGCHLD
と終了ステータスのリンクが見つかりません。
Linuxの終了ステータスとSIGCHLD
の違いは何ですか?wait()SIGCHLDと終了ステータス
子供が終了すると、によってブロックされたSIGCHLD
シグナルが送信されます(なぜなら、子供の終了ステータスが必要なのでしょうか? SIGCHLD
と終了ステータスのリンクが見つかりません。
子プロセスの終了ステータスは、exit()
(または_exit()
)システムコールによって親プロセスに返される値です。これは通常、子プロセスの成功または失敗を示す単純な整数であり、ゼロは成功(慣例による)を示します。
SIGCHLDは、子プロセスが終了したときに親プロセスに送信される信号です。これは、待機中の親に、その子が終了したことを通知するだけです。
2つの組み合わせは、子プロセスの実行結果をその親に戻すために使用されます。シグナルは、子が終了したときに親に通知し、終了ステータスは、子の実行結果が親に通知します。親は、子が終了したことを示す信号(またはwait()
またはwaitpid()
からの戻り値)を受信するまで、子の終了ステータスを取得することはできません。
exit()
と
wait()
を使用している
親。
親プロセスが子の実行ステータスが何であるかを気にしない場合は、wait()
から返された子の終了コードを無視できます。一方、複雑なシステムでは、子プロセスの新しいインスタンスを再起動(fork()
)したり、子プロセスが完了した(または完了しなかった)場合には他のプログラムを実行するために、終了ステータスが何であるかを知る必要がありますそのタスクは適切に行われます。
verry先生、ありがとう、信号と終了ステータスの組み合わせが分かりました。 – arctic
終了状態は、プロセスによって(exit
への呼び出しによって)返され、親プロセスに成功したかどうかを通知します。
親プロセスがwait
またはwaitpid
を呼び出すと、その終了ステータス(およびwaitpid
の場合、その子のPID)を受け取り、その値に基づいて決定を下すことができます。
親がSIGCHLD
シグナルを受信した場合、プロセスにその子プロセスの1つが終了したことを伝えるすべてが通知されます。親に子のpidまたは終了ステータスに関する情報を与えるものではありません。親に、wait
またはwaitpid
を呼び出す時間だと非同期的に伝える方法です。
あなたに感謝しているので、信号は親に "待機"を介して子の終了ステータスを取得する "行く"を与えています。 – arctic
親プロセスが\ _exitを呼び出す子プロセスからの待機によってどのように終了ステータスを取得するのか(http://stackoverflow.com/q/6749475)。また、子プロセスを待つためにwait()を使用している場合は、[子プロセスの終了ステータスコードの取得](http://stackoverflow.com/q/27306764)と[SIGCHLDハンドラで何かする必要がありますか?終了時刻?](http://stackoverflow.com/q/18437779) – jww