3

让我们考虑以下示例。

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

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

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

4

3 回答 3

2

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

于 2012-07-03T00:20:30.037 回答
1

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

将其包装在一个简单的二进制文件中。(即使是 shellscript 也可以。)

于 2012-07-03T00:14:23.157 回答
0

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

您可以通过以下方式忽略信号管道

信号(SIGPIPE,SIG_IGN);

于 2012-12-24T09:52:33.697 回答