Почему WIFEXITED возвращает True при запущенном процессе? - PullRequest
7 голосов
/ 29 октября 2009

Когда я жду определенную группу запущенных процессов, которая является дочерним процессом, WIFEXITED возвращает true, сообщая, что процесс завершен? Это так работает? Кажется, что-то я не понимаю ...

if ( waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG ) == -1)
    perror("Wait error");

if ( WIFEXITED(pstatus) ) {
    strncpy(buf,  "Exited", buf_size);
    return 0;

Ответы [ 2 ]

6 голосов
/ 29 октября 2009

Как вы указали WNOHANG Я думаю, waitpid возвращает 0, а pstatus имеет значение, которое было раньше, поэтому WIFEXITED не работает с обновленными данными.

, если было указано WNOHANG и один или несколько дочерних объектов (ren) указанный pid существует, но еще не изменил состояние, затем 0 возвращается.

1 голос
/ 03 февраля 2011

waitpid возвращает собранный дочерний pid, если он успешно получит дочерний. При использовании с WNOHANG, он немедленно возвращает 0, если нет дочерних элементов. Таким образом, вам нужно проверить, является ли возвращаемое значение 0 или pid, прежде чем проверять status. Подробности здесь:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html

...