php多进程模型
前言
基于linux的多进程模型:https://github.com/d2gin/process
笔记
如果子进程是阻塞运行的,需要在运行期间分发信号,或者使用异步分发。
// 异步分发 pcntl_async_signals(true); foreach (range(1, $this->total) as $i) { // 控制最大运行进程数 $this->waitingWorkerReleaseIfExceed(); // 打开一个进程 $this->fork(); }
主进程用死循环等待子进程退出会导致主进程接收不到信号
// 主进程保持运行 while (!empty($this->workerPids)) { // 进程长时间挂起会导致接收不到信号 $pid = pcntl_wait($status); }
kill
命令信号缺省情况下会发送SIGTERM
信号,这个信号被php捕获后需要自己终止进程,不然kill命令会杀不死进程。SIGCHLD
信号使用pcntl_wait
能够获取到子进程的进程id。命令行
CTRL+C
会发送SIGINT
信号。
php多进程模型
http://blog.icy8.cn/posts/2057/