(PHP 8 >= 8.4.0)
pcntl_waitid — Ожидает, пока дочерний процесс изменит состояние
$idtype = P_ALL,$id = null,&$info = [],$flags = WEXITED,&$resource_usage = []Функция получает информацию о статусе, которая относится к событиям завершения, остановки и (или) продолжения в дочерних процессах родительского процесса.
Функция заблокирует процесс, который вызвал дочерние процессы, до тех пор, пока не возникнет ошибка
или у функции не появится доступ к информации о состоянии, которая удовлетворяет каждому из следующих условий,
если только не передали флаг WNOHANG:
idtype
и id.
flags.
Функция вернёт результат немедленно, если доступ к информации об изменении статуса дочернего процесса появился до вызова функции pcntl_waitid(). Порядок, в котором функция сообщит о статусе дочерних процессов, не определили, если доступ к информации об изменении статуса появился для двух или большего количества дочерних процессов.
Замечание:
Документация касается POSIX-спецификации функции
waitid, и ряд дополнительных параметров, которые характерны для реализации функции в системах Linux, NetBSD и FreeBSD. Подробнее о работе функцииwaitidв текущей системе рассказывает man-страница руководства к функцииwaitid(2)конкретной системы.
idtypeididtype и 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.
|
resource_usage
Функция заполнит переменную resource_usage массивом
со статистикой потребления ресурсов дочерним процессом.
Функция заполняет переменную, только если в системах наподобие FreeBSD доступен системный вызов wait6
или в ОС Linux при доступности прямого системного вызова waitid.
Функция 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
указали недопустимый набор процессов.
|
| Версия | Описание |
|---|---|
| 8.5.0 |
Добавили параметр resource_usage.
|