让我们考虑以下示例。
我有一个创建管道的父进程,生成一个子进程并使用此管道读取子进程的标准输出。在某些时候,父进程不再对子输出感兴趣,并关闭管道的读取结束。
显然,如果孩子继续写作,这会导致子进程收到SIGPIPE
信号。
问题:有没有办法将孩子的输出重定向到/dev/null
,这样它仍然可以继续运行并产生输出,但父进程可以继续做其他事情,并在孩子身上调用waitpid
后来?请注意,将子项的SIGPIPE
处理程序设置为SIG_IGN
不是一种选择,因为我无法控制子项的信号处理程序。
答案 0 :(得分:2)
自己模仿/dev/null
- fork()
一个新进程,其工作是阅读并忽略子进程的输出。
答案 1 :(得分:1)
请注意,将子项的SIGPIPE处理程序设置为SIG_IGN不是一个选项,因为我无法控制子项的信号处理程序。
用简单的二进制文件包装它。 (即使是一个shellcript也会做。)
答案 2 :(得分:0)
当两个组件之间的管道断裂时发生Sigpipe。
您可以通过以下
忽略sigpipe信号(SIGPIPE,SIG_IGN);