防止SIGPIPE(Preventing SIGPIPE)

2019-09-19 00:50发布

让我们看看下面的例子。

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

显然,如果孩子一直写,这会导致子进程接收SIGPIPE信号。

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

Answer 1:

模拟/dev/null自己- fork()一个新的进程,其任务是读取和忽略孩子的输出。



Answer 2:

需要注意的是,孩子的SIGPIPE处理程序设置为SIG_IGN是不是一种选择,因为我没有对孩子的信号处理程序的控制。

它包装在一个简单的二进制文件。 (即使是一个shell脚本会做顺便说一句。)



Answer 3:

SIGPIPE发生在两个部件损坏的管道。

您可以忽略以下的SIGPIPE

信号(SIGPIPE,SIG_IGN);



文章来源: Preventing SIGPIPE