Почему WIFEXITED возвращает True при запущенном процессе?
-
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 р>