SIGCHLDハンドラー関数で次の問題が発生しました。
ハンドラーコードは非常に単純です。
void sigchld_handler(int signum)
{
pid_t ended;
signal(SIGCHLD, sigchld_handler);
ended = wait(NULL);
// do some stuff with the PID of the finished child process
}
これは、子供を1人だけフォークする場合にうまく機能します。2つ(またはそれ以上)の子があり、そのうちの1つが実行を終了すると、sigchld_handler()が開始し、「ended = wait(NULL)」行に到達すると、プログラムはもう1つの子が終了するまで待機します。
別の方法で終了したばかりの子のPIDを取得し、この待機を回避する方法はありますか?