【问题标题】:avoid calling sigchld handler in a part of the code避免在部分代码中调用 sigchld 处理程序
【发布时间】:2020-02-18 00:42:06
【问题描述】:

我的程序上有一个 SIGCHLD 处理程序,它可以获取僵尸进程。

如何避免在执行多个 fork() 调用和 waitpid() 调用的部分代码中调用 SIGCHLD 处理程序?

因为现在,当我进行 fork() 调用并且孩子完成他的执行时,它返回一个 SIGCHLD 信号,因此它调用 SIGCHLD 处理程序,但我想在代码的那部分而不是在处理程序?

我该怎么做?阻塞 SIGCHLD 信号?

【问题讨论】:

  • 您是否尝试过阻止它并查看是否按您想要的方式工作?
  • 如果您想要默认行为,请在您不希望信号处理程序处理 SIGCHLD 时恢复 SIG_DFL 处理。

标签: c signals posix


【解决方案1】:

试试这个:

   sigemptyset(&set);
   sigaddset(&set, SIGCHLD);
   s = pthread_sigmask(SIG_BLOCK, &set, NULL);

稍后,当您完成此操作后,使用 SIG_UNBLOCK 解除对 sig 处理程序的阻塞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多