- 締切済み
forkで子が親を終了させるか?
fork() によって作られた子プロセスが、親プロセスを終了させる場合があるでしょうか? 形としては良く見かけるもので次のようになっています。 pid_t pid = fork(); if (pid < 0) { エラー処理 return; } else if (pid == 0) { 子の処理 ... (1) _exit(0); } /* ここが実行されない場合がある */ return; (1)の箇所に sleep() を幾らか入れると再現しなくなります。 親子の関係で子が親へ影響を与えることがあるでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hidebun
- ベストアンサー率50% (92/181)
回答No.2
>この部分は問題ないと思っているのですが、少しコードを変形してみようと思います。 return文に来ないのに、親プロセスが終了しているのは、 明示的にどこかでexitしているのではないかと思ったのですが、 (それがSIGCHLDのハンドラ内だと思った) 再現性があるのなら、SIGCHLDをハンドリングしないようにして return文に来るようになるかどうか、確認したほうがいいと思います。 コードを修正する前に。
- hidebun
- ベストアンサー率50% (92/181)
回答No.1
子の状態が変化したときに飛ばす、シグナル:SIGCHLD を親が受け取って、処理しているのではないですか? http://www.csg.is.titech.ac.jp/~chiba/lecture/web/web03.html
質問者
補足
ご意見ありがとうございます。 SIGCHLDのハンドラはありますが、 waitpid(-1, &status, WNOHANG); のようにゾンビ対策のみです。 この部分は問題ないと思っているのですが、少しコードを変形してみようと思います。
お礼
時間が掛かりそうなので、ここで締め切りたいと思います。 有難うございました。
補足
>再現性があるのなら、SIGCHLDをハンドリングしないようにして 何か可能性があると言うことでしょうか?