Если вы используете waitpid()
более или менее, как показано, вам сообщат PID одного из умерших дочерних процессов - обычно это будет единственный процесс, который умер, но если вы получите поток из них Вы можете получить один сигнал и собрать много трупов. Итак, используйте:
void sigchld_handler(int signum)
{
pid_t pid;
int status;
while ((pid = waitpid(-1, &status, WNOHANG)) != -1)
{
unregister_child(pid, status); // Or whatever you need to do with the PID
}
}
Вы можете заменить &status
на NULL
, если вас не волнует статус выхода ребенка.