我正在阅读一篇关于信号的文章,这部分代码我不知道它在做什么。有人可以帮我解释一下吗?本文是关于创建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()");
答案 0 :(得分:2)
根据sigaction
的Linux手册页:
POSIX.1-1990禁止将SIGCHLD的操作设置为 SIG_IGN。 POSIX.1-2001允许这种可能性,以便忽略 SIGCHLD可用于防止僵尸的创建(参见 等待(2))。
也就是说,使用SIGCHLD
明确忽略SIG_IGN
会导致操作系统在终止时自动销毁子进程,因此您不必wait*
。这通常是您想要的,尽管有时并非如此,因为它还阻止父进程使用wait*
来确定子进程的退出状态。