php多进程模型

前言

基于linux的多进程模型:https://github.com/d2gin/process

笔记

  1. 如果子进程是阻塞运行的,需要在运行期间分发信号,或者使用异步分发。

    // 异步分发
    pcntl_async_signals(true);
    foreach (range(1, $this->total) as $i) {
        // 控制最大运行进程数
        $this->waitingWorkerReleaseIfExceed();
        // 打开一个进程
        $this->fork();
    }
  2. 主进程用死循环等待子进程退出会导致主进程接收不到信号

    // 主进程保持运行
    while (!empty($this->workerPids)) {
        // 进程长时间挂起会导致接收不到信号
        $pid = pcntl_wait($status);
    }
  3. kill命令信号缺省情况下会发送SIGTERM信号,这个信号被php捕获后需要自己终止进程,不然kill命令会杀不死进程。

  4. SIGCHLD信号使用pcntl_wait能够获取到子进程的进程id。

  5. 命令行CTRL+C会发送SIGINT信号。


php多进程模型
http://blog.icy8.cn/posts/2057/
作者
icy8
发布于
2022年7月11日
许可协议