Почему WIFEXITED возвращает True при запущенном процессе?

StackOverflow https://stackoverflow.com/questions/1643210

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

if ( WIFEXITED(pstatus) ) {
    strncpy(buf,  "Exited", buf_size);
    return 0;
Это было полезно?

Решение

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

  

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top