linux - 防止SIGPIPE

标签 linux signals posix ipc sigpipe

让我们考虑以下示例。

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

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

问题:有没有一种方法可以将子进程的输出重定向到/dev/null,这样它仍然可以继续运行并产生输出,但是父进程可以继续做其他事情并调用waitpid 稍后在 child 身上?请注意,将 child 的 SIGPIPE 处理程序设置为 SIG_IGN 不是一个选项,因为我无法控制子进程的信号处理程序。

最佳答案

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

关于linux - 防止SIGPIPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302873/

相关文章:

linux - 如何在 Linux 上静默安装 anaconda/miniconda

linux - 在 4 个部分中创建绑定(bind)拆分窗口

linux - 在 AWS 基础设施中使用 bash 脚本从 Autoscaling Group 标签安装包

c - 处理/避免 C 中的堆栈溢出

Linux open(path, O_NONBLOCK | O_RDONLY | O_DIRECT) 阻止文件读取

c - 尽管再次使用 O_CREAT,但以相同名称重新打开时 shm_open() 失败

linux - 如何确定 glibc (glibcxx) 二进制将依赖的版本?

synchronization - "S->value <= 0"signal() 在没有忙等待的信号量中实现

再次调用信号处理程序本身

c - pthread_cond_broadcast 取消阻止不等待条件变量的线程