Какая польза от игнорирования сигнала `SIGCHLD` с помощью` sigaction (2) `?
Оказывается, мы можем предотвратить появление процесса зомби (то есть того, чей родитель неwait()
для этого_exit()
) указавSIGCHLD
сигнал, который нужно игнорировать сsigaction()
его родителем. Тем не менее, похоже,SIGCHLD
в любом случае по умолчанию игнорируется. Как это работает?
int main (void) {
struct sigaction sa;
sa.sa_handler = SIG_IGN; //handle signal by ignoring
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGCHLD, &sa, 0) == -1) {
perror(0);
exit(1);
}
int pid = fork();
if (pid == 0) { //child process
_exit(0);
}
do_something(); //parent process
return 0;
}