在我们的代码库中,我们有一部分软件允许运行任意数量的外部程序并通过使用 fork() 和安装 SIGCHLD 处理程序来监控它们的退出代码。在单元测试用例中,这个软件可以正常工作。
然而,运行这个分叉“服务器”的进程也在多个线程中运行一堆软件模块。不幸的是,这个(旧)软件的某些部分正在使用 popen() ,这似乎需要使用它自己的 SIGCHLD 处理程序。我们看到的结果是程序将在调用 pclose() 时失败,并带有 errno ECHILD。
有什么方法可以并行使用 SIGCHLD 处理程序和对 popen/pclose 的调用?