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

# pcntl_rfork

(PHP 8 >= 8.1.0)

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

### Описание

function 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() - Устанавливает заголовок процесса

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open