管道未执行+信号处理

时间:2012-10-01 02:56:27

标签: c shell unix pipe system-calls

我正在尝试在shell中实现一个简单的两阶段管道。

当我不做第二个fork并且只在父级中执行管道的其余部分时,它工作正常但我退出shell。这就是为什么我想做第二个分叉所以我不退出shell。但由于某些原因,上述代码没有任何反应。你能帮我弄清楚可能出错的地方吗?我有一种感觉,它不会等待我的进程在退出之前完成,但我可能是错的。

1 个答案:

答案 0 :(得分:1)

解决方案:在父级中关闭fd[0]fd[1]

在您想要的双叉模型中,您的父进程(shell)保持其fd[1]的副本打开。如果打开,孩子pid2将永远不会在其标准输入fd上看到EOF。

评论:

  1. 两个孩子都应该在dup2'ing
  2. 之后关闭他们的管道fds
  3. execvp之后的代码,无论是在您的 pastie 之上还是在 pastie 中,您都认为execvp会在正常情况下返回控制权。它不是。对于此代码,您最多可能希望使用execvpperror关注exit