当前位置:网站首页>聊聊swoole或者php cli 进程如何热重启

聊聊swoole或者php cli 进程如何热重启

2022-06-25 22:05:00 ndrandy

在讨论这个话题之前,需要了解一下linux的信号,在linux中发起一个信号最常用的函数莫过于kill了,如 kill -SIGUSR1 pid、kill -9 pid 、kill -SIGTERM pid 等等。这些都属于软中断

进程在收到这些信号之后,默认的处理行为,就是不管三七二十一直接退出进程,  这时候如果进程正在处理业务数据,那么不好意思,直接就没了。所以该怎么处理呢?

 核心步骤

  1. 注册信号处理函数,去拦截监听进程收到的信号,改变进程默认的处理行为
  2. 在业务层代码,做一个标记状态,当状态为可退出时,直接exit

 

下面用php模拟实现

<?php

$running = true;

pcntl_signal(SIGTERM, function () use (&$running) {
    //收到stop命令, 将开关标记为可退出
    $running = false;
    //这里并没有直接exit
});

while ($running){
    //这里处理业务数据逻辑
    //do step.1
    //do step.2
    //do step.3
    //do step.4
    //do step.5
    //do step.6
}

/**
 * 当进程收到SIGTERM信号时(即:stop),代码逻辑可能运行到step.1 ~ step.6之间的任何一处。收到 信 
 * 号之后立即改变$running= false,此时不直接exit,保证本轮while循环跑完,到下一轮while的时候
 * $running= false,while循环退出, 进程就安全退出了
*/

 

原网站

版权声明
本文为[ndrandy]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_39721205/article/details/107517400