首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止SIGPIPE

防止SIGPIPE
EN

Stack Overflow用户
提问于 2012-07-03 08:11:36
回答 3查看 1.5K关注 0票数 3

让我们考虑一下下面的例子。

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

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

问:有没有一种方法可以将子进程的输出重定向到/dev/null,以便它仍然保持运行并生成输出,但父进程可以继续做其他事情,并在以后对子进程调用waitpid?请注意,不能将孩子的SIGPIPE处理程序设置为SIG_IGN,因为我无法控制孩子的信号处理程序。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-03 08:20:30

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

票数 2
EN

Stack Overflow用户

发布于 2012-07-03 08:14:23

注意,不能将孩子的SIGPIPE处理程序设置为SIG_IGN,因为我无法控制孩子的信号处理程序。

将它包装在一个简单的二进制文件中。(顺便说一句,即使是shellscript脚本也能做到。)

票数 1
EN

Stack Overflow用户

发布于 2012-12-24 17:52:34

当两个组件之间的管道断开时,就会发生SigPipe.

您可以通过以下方式忽略sigPipe值

signal(SIGPIPE,SIG_IGN);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11302873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档