POSIXシグナル2
同じシグナルがほぼ同時に複数配送される場合
シグナルハンドラを設定してwaitを呼び出すだけでは、ゾンビ防止には不十分。Unixのシグナルはキューイングされないために、シグナルが発生した数だけ、シグナルハンドラが実行されない場合があるから。
正しい解決方法は、waitの代わりにwaitpidを呼び出すこと。
//waitpidを呼び出すシグナルハンドラ void sig_child(int signo) { pid_t pid; int stat; while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0) printf("child %d terminated\n", pid); return; }
ネットワークプログラミングで遭遇する3種類の状況
参考文献