プロセスのリソースを管理する

# 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`: 設定すると、 子のスレッドが終了時に kernel は SIGCHILD ではなく、 SIGUSR1 を返します。 これは、Linux のcloneが終了時に、 親に状態を知らせる動作を模倣する意図があります。
`signal`

  シグナル番号

### 戻り値

成功時には、親スレッドの実行時に子プロセスのPIDを返し、 子のスレッド実行時に `0` を返します。 失敗時には、親のコンテキストには `-1` を返し、 子プロセスは作られません。そして、PHP のエラーが発生します。

### 例

例1 pcntl_rfork() の例

    <?php

    $pid = pcntl_rfork(RFNOWAIT|RFTSIGZMB, SIGUSR1);
    if ($pid > 0) {
      // This is the parent process.
      var_dump($pid);
    } else {
      // This is the child process.
      var_dump($pid);
      sleep(2); // as the child does not wait, so we see its "pid"
    }
    ?>

上の例の出力は、 たとえば以下のようになります。

    int(77093)
    int(0)

### 注意

> 注意:

> この関数は、BSDシステムでのみ利用可能です。

### 参考

- pcntl_fork() - 現在実行中のプロセスをフォークする
- pcntl_waitpid() - 待つかフォークした子プロセスのステータスを返す
- pcntl_signal() - シグナルハンドラを設定する
- cli_set_process_title() - プロセスのタイトルを設定する

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