当前位置:网站首页>聊聊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 等等。这些都属于软中断
进程在收到这些信号之后,默认的处理行为,就是不管三七二十一直接退出进程, 这时候如果进程正在处理业务数据,那么不好意思,直接就没了。所以该怎么处理呢?
核心步骤
- 注册信号处理函数,去拦截监听进程收到的信号,改变进程默认的处理行为
- 在业务层代码,做一个标记状态,当状态为可退出时,直接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循环退出, 进程就安全退出了
*/
边栏推荐
- qtcreator 格式化代码
- hiberate核心API/配置文件/一级缓存详解
- golang Make a list of intervals with sequential numbers
- Today's 61 Fu
- Ad20 learning notes II
- Graduation trip | recommended 5-day trip to London
- 解析產品開發失敗的5個根本原因
- C1. k-LCM (easy version)-Codeforces Round #708 (Div. 2)
- C2. k-LCM (hard version)-Codeforces Round #708 (Div. 2)
- MySQL自定义函数实例
猜你喜欢
随机推荐
Architecture part -- the use of UMI framework and DVA
Summary of common JDBC exceptions and error solutions
DPVS-FullNAT模式keepalived篇
18亿像素火星全景超高清NASA放出,非常震撼
mongodb
库项目和App项目中清单文件的包名不要相同
.user.ini文件导致的php网站安装问题
Kotlin空指针Bug
Online customer service - charging standards and service provision of third parties
C. Planar Reflections-CodeCraft-21 and Codeforces Round #711 (Div. 2)
数据同步
实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式
Leetcode 513. 找树左下角的值
Qt 中文和英文分别使用不同的字体
Visual studio code create minimal web API (asp.net core)
C1. k-LCM (easy version)-Codeforces Round #708 (Div. 2)
UE4 learning record 2 adding skeleton, skin and motion animation to characters
社招两年半10个公司28轮面试面经(含字节、拼多多、美团、滴滴......)
Graduation trip | recommended 5-day trip to London
DPVS-FullNAT模式管理篇








