次のコード fork() の共通の親からの 2 つの子があり、それらの間のパイプラインを実装しています。親でwait()関数を呼び出すと、プログラムが完全に実行されるだけです。ただし、wait() 関数を (両方の子から取得するために) 2 回呼び出そうとすると、プログラムは何もせず、強制終了する必要があります。
ここで二人の子供が待ちきれない理由を誰か教えてもらえますか?
int main()
{
int status;
int pipeline[2];
pipe(pipeline);
pid_t pid_A, pid_B;
if( !(pid_A = fork()) )
{
dup2(pipeline[1], 1);
close(pipeline[0]);
close(pipeline[1]);
execl("/bin/ls", "ls", 0);
}
if( !(pid_B = fork()) )
{
dup2(pipeline[0], 0);
close(pipeline[0]);
close(pipeline[1]);
execl("/usr/bin/wc", "wc", 0);
}
wait(&status);
wait(&status);
}