0

在我们的代码库中,我们有一部分软件允许运行任意数量的外部程序并通过使用 fork() 和安装 SIGCHLD 处理程序来监控它们的退出代码。在单元测试用例中,这个软件可以正常工作。

然而,运行这个分叉“服务器”的进程也在多个线程中运行一堆软件模块。不幸的是,这个(旧)软件的某些部分正在使用 popen() ,这似乎需要使用它自己的 SIGCHLD 处理程序。我们看到的结果是程序将在调用 pclose() 时失败,并带有 errno ECHILD。

有什么方法可以并行使用 SIGCHLD 处理程序和对 popen/pclose 的调用?

4

1 回答 1

1

在 fork() 之后,继承了信号处理程序。因此,也许您应该在调用旧版软件之前,通过在第一个子进程中使用带有 SIG_DFL 的 signal() 将它们重置为 fork() 和 exec() 之间的默认值。

于 2013-10-11T11:45:35.030 回答