您需要非常小心管道:
注意有多少关闭,特别是在孩子.如果使用dup2(),则不必显式关闭标准输入和输出; 但是,如果您执行显式关闭,dup()可以正常工作.另请注意,dup()和dup2()都不会关闭重复的文件描述符.如果省略关闭管道,则两个程序都无法正确检测到EOF; 当前进程仍然可以写入管道这一事实意味着管道上没有EOF,程序将无限期挂起.
请注意,此解决方案不会改变孩子的标准错误; 它与父级的标准错误位于同一位置.通常,这是正确的.如果您有特定要求来自子项的错误消息的处理方式不同,那么也要对子项的标准错误采取适当的操作.