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

signal

シグナル番号

戻り値

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

例1 pcntl_rfork() の例

<?php

$pid 
pcntl_rfork(RFNOWAIT|RFTSIGZMBSIGUSR1);
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)

参考

関連キーワード:  プロセス, リソース, pcntl, 設定, 管理, int, rfork, flags, 終了, テーブル