(PHP 8 >= 8.1.0)
pcntl_rfork — Взаимодействует с ресурсами процесса
flags
Параметр flags
определяет, какие ресурсы вызывающего процесса (родительского)
разделяются новым процессом (дочерним) или инициализируются в значения по умолчанию.
flags
является логическим OR (или) некоторого подмножества из:
RFPROC
: Если установлено, создаётся новый процесс;
в противном случае изменения затрагивают текущий процесс.
RFNOWAIT
: Если установлено, дочерний процесс будет отделён от родительского.
При выходе дочерний процесс не будет оставлять статус для родителя, чтобы забрать его.
RFFDG
: Если установлено, копируется таблица дескрипторов файлов вызывающей стороны;
В противном случае два процесса используют одну таблицу.
RFCFDG
: Если установлено, новый процесс начинается с чистой таблицей дескрипторов файлов.
Взаимоисключающий флаг с RFFDG
.
RFLINUXTHPN
: Если установлено, ядро будет возвращать SIGUSR1 вместо SIGCHILD при выходе из дочернего потока.
Предназначен для уведомления родительского процесса о выходе из Linux-клона.
signal
Номер сигнала.
В случае успешного выполнения в потоке выполнения родительского процесса возвращается PID дочернего процесса,
а в потоке выполнения дочернего процесса возвращается 0
.
В случае возникновения ошибки в контексте родителя будет возвращено -1
,
дочерний процесс не будет создан и будет выдана ошибка PHP.
Пример #1 Пример использования pcntl_rfork()
<?php
$pid = pcntl_rfork(RFNOWAIT|RFTSIGZMB, SIGUSR1);
if ($pid > 0) {
// Родительский процесс.
var_dump($pid);
} else {
// Дочерний процесс.
var_dump($pid);
sleep(2); // поскольку дочерний процесс не ждёт, мы видим его "pid".
}
?>
Вывод приведённого примера будет похож на:
int(77093) int(0)
Замечание:
Функция доступна только в системах BSD.