通过sigaction捕获SIGCHLD

时间:2017-10-23 22:33:37

标签: c signals fork

我正在阅读一篇关于信号的文章,这部分代码我不知道它在做什么。有人可以帮我解释一下吗?本文是关于创建TCP未阻止的服务器。

struct sigaction sigchldAction;
sigchldAction.sa_handler = SIG_IGN;
sigchldAction.sa_flags = 0;
sigemptyset(&sigchldAction.sa_mask);
if (sigaction(SIGCHLD, &sigchldAction, NULL) == -1) callError("sigaction()");

1 个答案:

答案 0 :(得分:2)

根据sigaction的Linux手册页:

  

POSIX.1-1990禁止将SIGCHLD的操作设置为   SIG_IGN。 POSIX.1-2001允许这种可能性,以便忽略   SIGCHLD可用于防止僵尸的创建(参见   等待(2))。

也就是说,使用SIGCHLD明确忽略SIG_IGN会导致操作系统在终止时自动销毁子进程,因此您不必wait*。这通常是您想要的,尽管有时并非如此,因为它还阻止父进程使用wait*来确定子进程的退出状态。