防止SIGPIPE

时间:2012-07-03 00:11:36

标签: linux signals posix ipc sigpipe

让我们考虑以下示例。

我有一个创建管道的父进程,生成一个子进程并使用此管道读取子进程的标准输出。在某些时候,父进程不再对子输出感兴趣,并关闭管道的读取结束。

显然,如果孩子继续写作,这会导致子进程收到SIGPIPE信号。

问题:有没有办法将孩子的输出重定向到/dev/null,这样它仍然可以继续运行并产生输出,但父进程可以继续做其他事情,并在孩子身上调用waitpid后来?请注意,将子项的SIGPIPE处理程序设置为SIG_IGN不是一种选择,因为我无法控制子项的信号处理程序。

3 个答案:

答案 0 :(得分:2)

自己模仿/dev/null - fork()一个新进程,其工作是阅读并忽略子进程的输出。

答案 1 :(得分:1)

  

请注意,将子项的SIGPIPE处理程序设置为SIG_IGN不是一个选项,因为我无法控制子项的信号处理程序。

用简单的二进制文件包装它。 (即使是一个shellcript也会做。)

答案 2 :(得分:0)

当两个组件之间的管道断裂时发生Sigpipe。

您可以通过以下

忽略sigpipe

信号(SIGPIPE,SIG_IGN);