Ожидать смены состояния дочернего процесса
#include <sys/wait.h>
int waitid( idtype_t idtype,
id_t id,
siginfo_t *infop,
int options );
- idtype
- Какие дочерние процессы необходимо ожидать:
- P_PID
- дочерний процесс с идентификатором (
pid_t
)id. - P_PGID
- любой дочерний процесс с идентификатором группы процессов равным (
pid_t
)id. - P_ALL
- любой дочерний процесс; id проигнорирован.
- id
- Ожидаемый процесс или идентификатор группы процессов в зависимости от idtype.
- infop
- Указатель на siginfo_t структуру, определенную в
<sys/siginfo.h>
, где функция может хранить текущее состояние дочернего элемента.
- options
- Комбинация следующих флагов (или ни один из них):
- WCONTINUED
- вернуть статус для любого дочернего процесса, который был остановлен и продолжился.
- WEXITED
- ждать завершения процесса(ов).
- WNOHANG
- завершить немедленно, если нет дочерних процессов для ожидания.
- WNOWAIT
- держать процесс в состоянии ожидания. Это не влияет на состояние процесса; процесс можно ждать снова после завершения вызова.
- WSTOPPED
- ждать и возвращать статус любого дочернего процесса, который остановился из-за полученного сигнала.
- WUNTRACED
- сообщать о статусе остановленного дочернего процесса.
libc
Функция waitid() блокирует поток до момента, когда один из дочерних процессов меняет состояние. Она записывает текущее состояние дочернего процесса в структуру, указанную в infop. Если дочерний процесс меняет состояние перед вызовом waitid(), waitid() возврат из функции происходит немедленно.
Если waitid() завершилась, когда был найден дочерний процесс, удовлетворяющий условиям в аргументах idtype и , то структура, на которую указывает infop, заполняется статусом процесса. Поле si_signo всегда равно SIGCHLD
.
Если idtype равен P_AL
и options равен WEXITED
| WTRAPPED
, вызов waitid() эквивалентен вызову wait().
- 0
- Один из дочерних процессов изменил его состояние. Если флаг
WNOHANG
был использован, 0
может быть возвращен (указывает на отсутствие ошибки); однако, никакие дочерние элементы не могли изменить состояние, если info->si_pid равен 0
.
- -1
- Возникла ошибка. Код ошибки записан в errno.
- ECHILD
- Набор процессов, указанных в idtype и id, не содержит процессов для ожидания.
- EFAULT
- Аргумент infop указывает на недопустимый адрес.
- EINTR
- Функция waitid() была прервана сигналом.
- EINVAL
- Для опций указано недопустимое значение, или idtype и id описывают недопустимый набор процессов.
POSIX 1003.1 X/Open Systems Interfaces Extension
- Да
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Да
- В потоке
- Да
siginfo_t, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), exit(), fork(), pause(), sigaction(), signal(), wait(), wait3(), wait4(), waitpid()
Предыдущий раздел: Описание API системной библиотеки