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;