waitid()

Ожидать смены состояния дочернего процесса

Прототип:

#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 системной библиотеки