1

我正在尝试在外壳中实现一个简单的两级管道。

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

4

1 回答 1

1

解决方法:关闭fd[0]fd[1]在父。

在您想要的双叉模型中,您的父进程(外壳)保持其副本处于fd[1]打开状态。打开此选项后,孩子pid2将永远不会在其标准输入 fd 上看到 EOF。

注释:

  1. 两个孩子都应该在 dup2'ing 后关闭他们的管道 fd
  2. 之后的代码execvp,无论是在上面还是在您的馅饼中,都表明您认为这execvp将在一般情况下返回控制权。它不是。对于此代码,您最多可能需要execvp使用 aperrorexit
于 2012-10-01T05:46:39.337 回答