私は私のメインプログラムと分かれた子供がいるこの奇妙な行動に入っています。親を殺すフォークされた子は親を殺すか?
___parent___
| | ____child_____
| 0 stdin | | |
| 1 pipe1[1]----------. | 1 stdout |
| 2 pipe2[1]----------.\ | 2 stderr |
|____________| \`----------> 3 pipe1[0] |
`----------> 5 pipe2[0] |
|______________|
だから、親はSTDINから入力を取得しますが、2本のパイプにSTDOUTとstderrををリダイレクトします:彼らは、この(数字はファイル記述子である)のように配管されています。子供はstdinを閉じて、代わりにパイプの読み込み端を使用します。
その後、私はちょうど子供を殺すために機能を持っている:
void killChild(){
printf("Killing %d\n", (int)childID);
fflush(stdout);
kill(childID, SIGKILL);
waitpid(childID, NULL, 0); // getting rid of the zombie
}
子が正常に殺されたが、問題は親自身が同様殺さということです。私は子供のPIDをチェックし、それは正しいです。
なぜ親は死んでいるのですか?
私はこの質問の名前が大好きです。そして芸術。 – Gabe
親はどの信号を受け取りましたか? – hochl
親は子を殺した後にstdoutまたはstderrに書き込みを試みますか?もしそうなら、それはSIGPIPEのために死にます。あなたはSIGCHLDの取り扱いを変更していますか? –