函式名稱:EvLoop::child()
適用版本:EvLoop::child() 函式是在 Libev >= 4.0.0 版本中引入的。
用法:EvLoop::child() 函式用於在主事件迴圈中註冊一個子程序的事件回撥函式。當子程序結束或暫停時,該事件回撥函式會被觸發。
語法:
EvLoop::child ( int $pid , float $trace_flags , callable $callback [, mixed $data = NULL [, int $priority = 0 ]] ) : EvChild
引數:
- $pid: 子程序的識別符號,可以是程序ID或0。
- $trace_flags: 程序跟蹤標誌。
- $callback: 子程序回撥函式,當子程序狀態發生變化時被呼叫。
- $data: 可選引數,傳遞給子程序回撥函式的使用者資料。
- $priority: 可選引數,指定事件處理的優先順序,預設為0。
返回值:返回一個 EvChild 物件,表示註冊的子程序事件。
示例:
$loop = new EvLoop();
// 定義子程序回撥函式
$child_callback = function($watcher, $pid, $revents) {
if ($revents & Ev::CHILD) {
$status = pcntl_wexitstatus($watcher->rpid); // 獲取子程序退出狀態
echo "子程序 {$watcher->rpid} 退出,狀態碼:{$status}\n";
// 停止子程序監視器
$watcher->stop();
// 也可在此處重新啟動新的子程序監視器
}
};
// 註冊一個子程序事件
$pid = pcntl_fork(); // 建立子程序
if ($pid == -1) {
die("子程序建立失敗");
} else if ($pid) { // 主程序
// 在主事件迴圈中註冊子程序的監視器
$child_watcher = $loop->child($pid, 0, $child_callback);
$loop->run();
} else { // 子程序
// 子程序的具體操作
exit(); // 子程序結束
}
以上示例建立了一個子程序監視器,當子程序結束時會觸發回撥函式,回撥函式會顯示子程序的退出狀態碼。