Я пытаюсь выяснить то, что pid имеет процесс, который отправил сигнал SIGCHLD, и я хочу сделать это в обработчике сигналов, который я создал для SIGCHLD. Как я сделал бы это? Я пробую:
int pid = waitpid(-1, NULL, WNOHANG);
потому что я хочу ожидать любого дочернего процесса, который порожден.
Если вы используете 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
, если вам не важен статус выхода дочернего элемента.