让popen和SIGCHLD处理程序并行工作

时间:2013-10-11 11:40:39

标签: c fork popen

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

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

有没有办法同时使用SIGCHLD处理程序和popen / pclose调用?

1 个答案:

答案 0 :(得分:1)

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