PHP Conference Japan 2024

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 clone 的結束父行程通知。

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 系統。

參見

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top