【问题标题】:Getting popen and SIGCHLD handler to work in parallel让 popen 和 SIGCHLD 处理程序并行工作
【发布时间】:2013-10-19 11:35:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: c fork popen


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 2016-10-31
      • 2021-01-25
      • 2019-08-04
      • 1970-01-01
      • 2012-01-13
      相关资源
      最近更新 更多