我有一个主管程序,通常希望收到SIGCHLD
个事件。但是,在收到SIGTERM
或类似信号后,忽略SIGCHLD
事件以防止僵尸是安全的,也是可取的。问题是,我不确定在信号处理程序内部调用signal(2)
是否合法,例如SIGTERM
来电signal(SIGCHLD, SIG_IGN)
。它不会出现导致问题,但我知道在信号处理程序中你可以做什么有很多限制,我无法弄清楚调用signal
是否是在禁区。
所以:这是合法的,可靠吗?如果没有,是否有另一种方法可以确保在SIGTERM
时仍然没有儿童仍然可以僵尸,即使他们没有正确wait
?
答案 0 :(得分:3)
对于Linux,请查看signal(7)的联机帮助页。有一个异步信号安全功能列表。它说:
POSIX.1-2004(也称为POSIX.1-2001技术勘误2)要求实现以保证在信号处理程序中可以安全地调用以下函数:
signal()
在列表中。所以这很安全。