dポイントプレゼントキャンペーン実施中!

fork() によって作られた子プロセスが、親プロセスを終了させる場合があるでしょうか?
形としては良く見かけるもので次のようになっています。
pid_t pid = fork();
if (pid < 0) {
 エラー処理
 return;
} else if (pid == 0) {
 子の処理 ... (1)
 _exit(0);
}
/* ここが実行されない場合がある */
return;

(1)の箇所に sleep() を幾らか入れると再現しなくなります。
親子の関係で子が親へ影響を与えることがあるでしょうか?

A 回答 (2件)

>この部分は問題ないと思っているのですが、少しコードを変形してみようと思います。



return文に来ないのに、親プロセスが終了しているのは、
明示的にどこかでexitしているのではないかと思ったのですが、
(それがSIGCHLDのハンドラ内だと思った)

再現性があるのなら、SIGCHLDをハンドリングしないようにして
return文に来るようになるかどうか、確認したほうがいいと思います。
コードを修正する前に。

この回答への補足

>再現性があるのなら、SIGCHLDをハンドリングしないようにして
何か可能性があると言うことでしょうか?

補足日時:2009/04/22 23:37
    • good
    • 0
この回答へのお礼

時間が掛かりそうなので、ここで締め切りたいと思います。
有難うございました。

お礼日時:2009/04/29 17:42

子の状態が変化したときに飛ばす、シグナル:SIGCHLD


を親が受け取って、処理しているのではないですか?

http://www.csg.is.titech.ac.jp/~chiba/lecture/we …

この回答への補足

ご意見ありがとうございます。
SIGCHLDのハンドラはありますが、
waitpid(-1, &status, WNOHANG);
のようにゾンビ対策のみです。
 この部分は問題ないと思っているのですが、少しコードを変形してみようと思います。

補足日時:2009/04/22 01:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!