Определите pid завершенного процесса

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

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

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

7
задан Jonathan Leffler 9 January 2015 в 21:50
поделиться

1 ответ

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

8
ответ дан 7 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: