|
waitpid を while でまわす理由
今北産業
- 子プロセスが死んだ場合に zombie にならないよう SIGCHLD に合わせて wait を(一度)呼ぶコードをよくみる (waitpid でも一度しか呼ばない場合は同じ事)
- そして、沢山作った子プロセスが一斉に死んだ場合に、SIGCHLD がその数より少ない数しか発行されなくて、wait を呼ぶ数が追いつかなくなり、zombie だらけになる事が、多々ある
- 非ブロック型の wait (waitpid とか、古いのだと wait3 とか)を(zombie の子プロセスを処理しきるまで) while でまわすだけで解決できるので、お勧め。
図にしてみた
|