(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_waitpid — Ожидает или возвращает статус порождённого дочернего процесса
Функция ожидания приостанавливает выполнение текущего процесса до тех пор, пока дочерний процесс, указанный в аргументе process_id
, не завершится или пока не будет получен сигнал, который завершает текущий процесс или вызывает функцию обработки сигнала.
Если дочерний процесс, указанный в аргументе process_id
, уже завершился ко времени вызова (так называемые "зомби" процессы), функция незамедлительно вернёт управление. Любые системные ресурсы используемые дочерним процессом будут освобождены. Обратитесь к вашей системному руководству waitpid(2) для уточнения специфики работы waitpid в вашей системе.
process_id
Аргумент process_id
может принимать одно из следующих значений:
< -1 | ожидать любой дочерний процесс, у которого значение идентификатор группы процессов (group ID) равно модулю значения аргумента |process_id |. |
-1 | ожидать любой дочерний процесс; это такое же поведение, что и у функции wait. |
0 | ожидать любой дочерний процесс, идентификатор группы процессов (group ID) которого равен идентификатору текущего процесса. |
> 0 | ожидать дочерний процесс ID которого равен process_id . |
Замечание:
Указание
-1
в качествеprocess_id
- это аналог функции pcntl_wait() (минусflags
).
status
pcntl_waitpid() разместит информацию о статусе по ссылке в аргументе status
, который может быть передан в следующие функции: pcntl_wifexited(), pcntl_wifstopped(), pcntl_wifsignaled(), pcntl_wexitstatus(), pcntl_wtermsig() и pcntl_wstopsig().
flags
Значение аргумента flags
- это битовая маска, которая может принимать значение ноль или более путём логического объединения следующих констант:
WNOHANG | Незамедлительно вернуть управление, если ни один из дочерних процессов не завершён |
WUNTRACED | Вернуть управление для остановленных дочерних процессов, о статусе которых ещё не сообщено |
Функция pcntl_wait() возвращает ID завершённого дочернего процесса, -1, если возникла ошибка, или ноль, если WNOHANG
был передан в аргумент flags
и не было доступных дочерних процессов.