4

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

那么:这是合法的,可靠的吗?如果没有,是否有另一种方法可以确保在SIGTERM可能僵尸出现时没有孩子仍在跑步,即使他们没有得到适当wait的教育?

4

1 回答 1

3

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

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

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

于 2013-05-31T20:00:36.643 回答