gpt4 book ai didi

c++ - fork() 2 children with pipeline, wait() 时出错

转载 作者:行者123 更新时间:2023-11-30 00:56:16 29 4
gpt4 key购买 nike

我有以下代码 fork() 的 2 个来自共同父项的子项,并在它们之间实现了一个管道。当我在父级中调用 wait() 函数时,只有程序运行完美。但是,如果我尝试调用 wait() 函数两次(从两个子项中获取),程序什么都不做,必须强制退出。

谁能告诉我为什么我不能在这里等两个 child ?

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);
}

最佳答案

在派生子项后,您需要关闭父项中管道的两端。问题是 ls 的输出将转到父级,而 wc 正在等待输入。所以第一个等待清理 ls,但第二个等待 wc,它被阻塞在一个没有接收数据的管道上。

关于c++ - fork() 2 children with pipeline, wait() 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584115/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com