Определить pid прекращенного процесса - PullRequest
7 голосов
/ 08 апреля 2010

Я пытаюсь выяснить, что такое pid процесса, который отправил сигнал SIGCHLD, и я хочу сделать это в обработчике сигналов, который я создал для SIGCHLD. Как бы я это сделал? Я пытаюсь:

int pid = waitpid(-1, NULL, WNOHANG);

потому что я хочу дождаться появления любого дочернего процесса.

1 Ответ

8 голосов
/ 08 апреля 2010

Если вы используете 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, если вас не волнует статус выхода ребенка.

...