【问题标题】:Can you call signal() from within a signal handler?您可以从信号处理程序中调用 signal() 吗?
【发布时间】:2013-05-27 14:07:12
【问题描述】:

我有一个主管程序,它通常希望接收SIGCHLD 事件。但是,在它收到SIGTERM 或类似信号后,忽略SIGCHLD 事件以防止僵尸是安全且可取的。问题是我不确定在信号处理程序中调用signal(2) 是否合法,例如SIGTERM 致电 signal(SIGCHLD, SIG_IGN)。它似乎不会引起问题,但我知道你可以在信号处理程序中执行的操作有很多限制,我无法弄清楚调用 signal 是否在禁区。

那么:这是否合法、可靠?如果没有,是否有另一种方法来确保在SIGTERM 时仍在运行的孩子不会僵尸,即使他们没有正确地waited on?

【问题讨论】:

    标签: unix signals sigchld


    【解决方案1】:

    对于 Linux,请查看 signal(7) 的联机帮助页。有一个异步信号安全功能列表。它说:

    POSIX.1-2004(也称为 POSIX.1-2001 技术勘误表 2)需要一个实现来保证可以在信号处理程序中安全地调用以下函数:

    signal() 在列表中。所以是安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多