(PHP 8 >= 8.4.0)
pcntl_waitid — Ожидает, пока дочерний процесс изменит состояние
Функция получает информацию о статусе, которая относится к событиям завершения, остановки и (или) продолжения в дочерних процессах родительского процесса.
Функция заблокирует процесс, который вызвал дочерние процессы, до тех пор, пока не возникнет ошибка
или у функции не появится доступ к информации о состоянии, которая удовлетворяет каждому из следующих условий,
если только не передали флаг WNOHANG
:
idtype
и id
.
flags
.
Функция вернёт результат немедленно, если доступ к информации об изменении статуса дочернего процесса появился до вызова функции pcntl_waitid(). Порядок, в котором функция сообщит о статусе дочерних процессов, не определили, если доступ к информации об изменении статуса появился для двух или большего количества дочерних процессов.
Замечание:
Документация касается POSIX-спецификации функции
waitid
, и ряд дополнительных параметров, которые характерны для реализации функции в системах Linux, NetBSD и FreeBSD. Подробнее о работе функцииwaitid
в текущей системе рассказывает man-страница руководства к функцииwaitid(2)
конкретной системы.
idtype
id
idtype
и id
указывают, какие дочерние процессы ожидать.
Значение аргумента idtype равно P_ALL |
Функция игнорирует аргумент id и ожидает изменения состояния каждого дочернего процесса.
|
Значение аргумента idtype равно P_PID |
Функция ожидает изменения состояния дочернего процесса,
идентификатор которого равен значению аргумента id .
|
Значение аргумента idtype равно P_PGID |
Функция ожидает изменения состояния каждого дочернего процесса,
идентификатор группы которого равен значению аргумента id .
|
Значение аргумента idtype равно P_PIDFD (с Linux 5.4) |
Функция ожидает изменения состояния дочернего процесса, на который ссылается
PID-идентификатор дескриптора файла, который указали в аргументе id .
Подробнее о PID-идентификаторе дескриптора файла
рассказывает man-страница руководства к функции pidfd_open(2) .
|
Значение аргумента idtype равно P_UID
|
Функция ожидает процессы, эффективный идентификатор пользователя которых
равен значению аргумента id .
|
Значение аргумента idtype равно P_GID
|
Функция ожидает процессы, эффективный идентификатор группы которых
равен значению аргумента id .
|
Значение аргумента idtype равно P_SID
|
Функция ожидает процессы, идентификатор сессии которых равен значению аргумента
id . Идентификатор сессии дочернего процесса
и идентификатор дочернего процесса совпадут, если дочерний процесс запустил свою сессию,
иначе идентификатор сессии дочернего процесса совпадёт с идентификатором сессии родительского процесса.
|
Значение аргумента idtype равно P_JAILID
|
Функция ожидает процессы внутри изоляции, чей идентификатор равен значению
аргумента id .
|
info
Функция заполнит параметр info
массивом,
который одержит информацию о сигнале.
Массив info
содержит следующие ключи:
signo
: Номер сигналаerrno
: Номер системной ошибкиcode
: Код сигналаstatus
: Значение, которое процесс вернул при выходе, или сигнал,
который изменил состояние процесса
pid
: Идентификатор процесса, который отправил сигналuid
: Реальный идентификатор пользователя процесса, который отправил сигналutime
: Время, которое затратил пользовательstime
: Время, которое затратила системаflags
Значение аргумента flags
состоит из нуля или большего количества
следующих констант, которые объединили побитовым оператором ИЛИ:
WCONTINUED |
Возвращать статус дочернего процесса, который продолжает работу
и о статусе которого либо не сообщалось, поскольку процесс продолжился
после остановки управления заданием, либо сообщалось только через
вызовы функции pcntl_waitid()
с флагом WNOWAIT .
|
WEXITED |
Ожидать процессы, которые сообщили о выходе. |
WNOHANG |
Не зависать, если статус недоступен; немедленно вернуть результат. |
WNOWAIT |
Сохранять процесс, статус которого возвращается в параметре info ,
в состоянии ожидания. Это не влияет на состояние процесса;
процесс разрешается ожидать снова после завершения этого вызова.
|
WSTOPPED |
Возвращать статус дочернего процесса,
который остановился после получения сигнала и статус которого
либо не сообщался с момента остановки процесса, либо о статусе сообщалось
только через вызовы функции pcntl_waitid()
с флагом WNOWAIT .
|
Функция pcntl_waitid() возвращает true
,
если указали флаг WNOHANG
и статус недоступен
ни для одного процесса, который определили аргументами
idtype
и id
.
Функция pcntl_waitid() возвращает true
при изменении состояния дочернего процесса.
В остальных случаях возвращается false
, а номер ошибки errno
получают функцией pcntl_get_last_error().
Замечание:
Текстовое описание номера ошибки
errno
получают функцией pcntl_strerror().
ECHILD |
У родительского процесса нет дочерних процессов, которые бы не ожидала функция. |
EINTR |
Выполнение функции pcntl_waitid() прервал сигнал. |
EINVAL |
В аргументе flags передали недопустимое значение
или через аргументы idtype и id
указали недопустимый набор процессов.
|