函式名:EvChild::createStopped()
適用版本:PHP Ev extension 0.2.0 或更高版本
用法:EvChild::createStopped() 函式用於建立一個EvChild物件,但該物件會被建立為“停止”狀態,即不會立即開始執行。這種物件通常用於非同步處理子程序。可以在後續的程式碼中使用 EvChild::start() 方法來啟動該物件。
示例:
$loop = new EvLoop();
$child = EvChild::createStopped(function($watcher, $pid, $signum) {
// 子程序結束時會執行這裡的回撥函式
echo "子程序結束: " . $pid . ", 訊號: " . $signum . PHP_EOL;
});
// 手動設定子程序id
$child->setPid(1234);
// 啟用子程序的 watcher 事件
$child->start();
// 假設在某個時刻需要殺死子程序
posix_kill($child->pid, SIGKILL);
// 程式繼續執行其他操作
// 停止子程序的 watcher 事件
$child->stop();
// 輸出結果示例:
// 子程序結束: 1234, 訊號: 9
在上面的示例中,我們首先建立了一個 EvLoop 物件,然後使用 EvChild::createStopped() 函式建立了一個 EvChild 物件,並傳入一個回撥函式來處理子程序結束的情況。接下來,我們手動設定了子程序的 id,並透過呼叫 EvChild::start() 方法來啟動該物件的事件監聽。在需要結束子程序時,我們使用 posix_kill()
函式傳送了一個 SIGKILL 訊號。最後,透過呼叫 EvChild::stop() 方法停止了子程序的事件監聽。