让我们考虑一下下面的例子。
我有一个父进程,它创建一个管道,派生子进程,并使用这个管道读取子进程的标准输出。在某些时候,父进程对子进程的输出不再感兴趣,并关闭管道的读取端。
显然,如果子进程继续写入,是否会导致子进程接收SIGPIPE信号。
问:有没有一种方法可以将子进程的输出重定向到/dev/null,以便它仍然保持运行并生成输出,但父进程可以继续做其他事情,并在以后对子进程调用waitpid?请注意,不能将孩子的SIGPIPE处理程序设置为SIG_IGN,因为我无法控制孩子的信号处理程序。
发布于 2012-07-03 08:20:30
自己模拟/dev/null -- fork()一个新进程,它的任务是读取子进程的输出并忽略它。
发布于 2012-07-03 08:14:23
注意,不能将孩子的SIGPIPE处理程序设置为SIG_IGN,因为我无法控制孩子的信号处理程序。
将它包装在一个简单的二进制文件中。(顺便说一句,即使是shellscript脚本也能做到。)
发布于 2012-12-24 17:52:34
当两个组件之间的管道断开时,就会发生SigPipe.
您可以通过以下方式忽略sigPipe值
signal(SIGPIPE,SIG_IGN);
https://stackoverflow.com/questions/11302873
复制相似问题