我正在读一篇关于信号的文章,我不确定这部分代码在做什么。有人能给我解释一下吗?本文是关于创建未阻止的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()");

最佳答案

根据sigaction的Linux手册页:
POSIX.1-1990不允许将SIGCHLD的操作设置为
签名。POSIX.1-2001允许这种可能性,因此忽略
SIGCHLD可用于防止创建僵尸(请参见
等待(2)。
也就是说,显式忽略SIGCHLD使用SIG_IGN会导致操作系统在终止时自动销毁子进程,这样您就不必为它们wait*。这通常是您想要的,尽管有时不是这样,因为它也阻止父进程使用wait*来确定孩子的退出状态。

10-08 07:35