你能从信号处理程序中调用signal()吗?

时间:2013-05-31 17:19:47

标签: unix signals sigchld

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

所以:这是合法的,可靠吗?如果没有,是否有另一种方法可以确保在SIGTERM时仍然没有儿童仍然可以僵尸,即使他们没有正确wait

1 个答案:

答案 0 :(得分:3)

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

  

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

signal()在列表中。所以这很安全。