pcntl_rfork
(PHP 8 >= 8.1.0)
pcntl_rfork — プロセスのリソースを管理する
パラメータ
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() - プロセスのタイトルを設定する
+add a note
User Contributed Notes
There are no user contributed notes for this page.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google