我正在尝试在shell中实现一个简单的两阶段管道。
当我不做第二个fork并且只在父级中执行管道的其余部分时,它工作正常但我退出shell。这就是为什么我想做第二个分叉所以我不退出shell。但由于某些原因,上述代码没有任何反应。你能帮我弄清楚可能出错的地方吗?我有一种感觉,它不会等待我的进程在退出之前完成,但我可能是错的。
答案 0 :(得分:1)
解决方案:在父级中关闭fd[0]
和fd[1]
。
在您想要的双叉模型中,您的父进程(shell)保持其fd[1]
的副本打开。如果打开,孩子pid2
将永远不会在其标准输入fd上看到EOF。
评论:
execvp
之后的代码,无论是在您的 pastie 之上还是在 pastie 中,您都认为execvp
会在正常情况下返回控制权。它不是。对于此代码,您最多可能希望使用execvp
和perror
关注exit
。