私はメインプロセスを2回フォークして2つの子を作成しています。さて問題は、第二子が死ぬことはないということですフォークされた最後の子は死ぬことはありません
ls | more
:2人の子供はこのようにお互いにパイプで連結されています。何故ですか?パイプの最後の子供はいつ本当に死ぬのですか?
wait()コールを削除すると、予想される結果はls | more
になりますが、それ以上の奇妙な動作(端末などの接続)が発生します。それは本当に死んでいませんmore
だps axw
と
int main(){
printf("[%d] main\n", getpid());
int pip[2], i;
pipe(pip);
/* CHILDREN*/
for (i=0; i<2; i++){
if (fork()==0){
/* First child */
if (i==0){
printf("[%d] child1\n", getpid());
close(1); dup(pip[1]);
close(pip[0]);
execlp("ls", "ls", NULL);}
/* Second child */
if (i==1){
printf("[%d] child2\n", getpid());
close(0); dup(pip[0]);
close(pip[1]);
execlp("more", "more", NULL);}
}
}
wait(NULL); // wait for first child
wait(NULL); // wait for second child
return 0;
}
この質問のタイトルは非常に暴力的です。 – Marlon
@マールロン・ハハは今までそれを見ていませんでした! – Pithikos