vendredi 22 juillet 2016

Will a parent process always receive SIGCHLD when a child process dies?

I am using the signalfd() function in non-blocking mode and the close on exec() feature also turned on:

sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGCHLD);

f_socket = signalfd(-1, &set, SFD_NONBLOCK | SFD_CLOEXEC);

Then I listen for signals using the poll() command.

Is it at all possible, when using that mechanism, to miss a SIGCHLD signal?

I have a server that has been running for nearly 3 weeks and it has one zombie. The only way I can think of for such to happen is that a child process died and somehow the parent did not receive the signal. Each time I access the server, it generally creates many children (the minimum is around 10 and I think the maximum is around 30) all of which get caught. So I am not too sure why just one would somehow disappear.

Aucun commentaire:

Enregistrer un commentaire