子プロセスの終了監視

子プロセス終了時に親プロセスに対して、SIGCLDが送られるので、それを親がsignal関数で受け取った後にwaitを実行する事で、子プロセスのリソースを解放する。
waitだけだと、多数の子プロセスがほぼ同時に終了した場合に、親プロセスにSIGCLDが届かない場合があり、子プロセスがゾンビプロセスになってしまう可能性がある。そこで、親プロセスで定期的にwaitpidを実行するとなお良し。
SIGCLDを受け取るためのsignal関数はシグナルを受信したら自動的に呼び出されるっぽい。
ゆえに、ソースコード上の記述位置は大して気にしなくてもいいかも?
まぁ、なんとなくfork文よりは前に記述しておいた方が安心かも。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です