PHP Conference Nagoya 2025

pcntl_rfork

(PHP 8 >= 8.1.0)

pcntl_rforkВзаимодействует с ресурсами процесса

Описание

pcntl_rfork(int $flags, int $signal = 0): int

Взаимодействует с ресурсами процесса.

Список параметров

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.

Смотрите также

  • pcntl_fork() - Разветвить (fork) текущий запущенный процесс
  • pcntl_waitpid() - Ожидает или возвращает статус порождённого дочернего процесса
  • pcntl_signal() - Установка обработчика сигнала
  • cli_set_process_title() - Устанавливает заголовок процесса

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top