(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.