我看到这样的SIGCHLD处理器的一些例子:SIGCHLD处理程序重新安装
void child()
{
wait(0);
signal(SIGCHLD, child);
}
void server_main()
{
...
signal(SIGCHLD, child);
...
for(;;;) {
...
switch(fork()) {
...
}
}
有两个部分在混淆我的处理程序: 1)。当孩子终止或停止时,SIGCHLD被捕获。那么为什么需要在处理程序中调用wait?信号已经到达。 2)。为什么需要重新安装SIGCHLD处理程序。信号调用是否会一劳永逸地安装处理程序?
谢谢!
谢谢,我看到了第一点。对于第二个,信号处理程序是为父权安装的?为什么当多个子进程死亡可能会导致信号处理程序不起作用? – Oxdeadbeef
请看看sarnold的解释,他解释得相当不错。 – halfdan