PHP
自帶的 pcntl
,存在不少不足,如:swoole
fork
這樣原始的接口,容易使用錯誤;Swoole\Process
提供了以下特性:code
echo
不會打印屏幕,而是寫入管道,讀鍵盤輸入能夠重定向爲管道讀取數據;Swoole\Process->exec()
接口,建立的進程能夠執行其餘程序,與原 PHP
父進程之間能夠方便的通訊;Swoole\Process
模塊,能夠使用 runtime hook
+proc_open
實現,參考協程進程管理;使用示例:協程
use Swoole\Process; // 主進程建立 3 個子進程 for ($n = 1; $n <= 3; $n++) { $process = new Process(function () use ($n) { echo 'Child #' . getmypid() . " start and sleep {$n}s" . PHP_EOL; sleep($n); echo 'Child #' . getmypid() . ' exit' . PHP_EOL; }); $process->start(); } // 主進程用 wait 回收子進程 for ($n = 3; $n--;) { $status = Process::wait(true); echo "Recycled #{$status['pid']}, code={$status['code']}, signal={$status['signal']}" . PHP_EOL; } echo 'Parent #' . getmypid() . ' exit' . PHP_EOL;