【发布时间】:2012-07-03 09:51:00
【问题描述】:
让我们考虑以下示例。
我有一个父进程创建一个管道,生成一个子进程并使用该管道读取子进程的标准输出。在某些时候,父进程不再对子进程的输出感兴趣,并关闭管道的读取端。
显然,如果孩子继续写,这是否会导致子进程收到SIGPIPE信号。
问题:有没有办法将子进程的输出重定向到/dev/null,以便它仍然继续运行并产生输出,但父进程可以继续做其他事情并稍后在子进程上调用waitpid?请注意,将孩子的 SIGPIPE 处理程序设置为 SIG_IGN 不是一个选项,因为我无法控制孩子的信号处理程序。
【问题讨论】:
-
下面 Gergely 和 sarnold 的建议基本正确。但请注意,SIGPIPE 的存在是有原因的:如果您没有它,生成输出的进程将一直旋转到输入的末尾(可能是永远)而不是退出——诸如“更多”或“头”之类的工具/tail" 将无法写入。你确定这是你想要的行为吗?
标签: linux signals posix ipc sigpipe