2011-02-05 5 views

答えて

5

waitを継続することは、単一の子を待って前にすべての子プロセスが終了するのは待つように()待つために渡す必要がありますどのような引数。それはerrno == ECHILD-1を返すまであなたがループ内wait(NULL)を呼び出す必要があります:

while (wait(NULL) != -1 || errno != ECHILD) { } 

wait(2) manual page:

から
ECHILD (for wait()) 

を呼び出す プロセスは、任意のunwaited-ため 子供を持っていません。

EINTR 

WNOHANGが設定されていないし、 非ブロック信号またはSIGCHLDが がキャッチしました。 signal(7)を参照してください。

このように、キャッチされた信号に惑わされないように、ECHILDをチェックする必要があります。

+0

なぜerrnoはECHILD – user465983

+0

@user465983になるのですか?ECHILD – bdonlan

+0

の引用を追加しましたなぜ引数なしでwait(NULL)をしますか? – user465983

関連する問題