当前位置:网站首页>聊聊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循环退出, 进程就安全退出了
*/
边栏推荐
猜你喜欢

excel如何实现中文单词自动翻译成英文?这个公式教你了

第五章 习题(124、678、15、19、22)【微机原理】【习题】

CXF

24class static member

流数据

如何设计产品的roadmap?

hiberate实体类CURD、事务操作汇总

UE4 learning records create a role and control its movement

Uniapp -- list page of multi header tabs

Hibernate architecture introduction and environment construction (very detailed)
随机推荐
Binary, hexadecimal, big end and small end
golang Make a list of intervals with sequential numbers
流数据
What is Unified Extensible Firmware Interface (UEFI)?
转载: QTableWidget详解(样式、右键菜单、表头塌陷、多选等)
OpenJudge NOI 2.1 15:Counterfeit Dollar
jdbc常见异常及错误解决办法汇总
CSDN force value
解析产品开发失败的5个根本原因
Once beego failed to find bee after passing the go get command Exe's pit
Uniapp -- framework arrangement and analysis summary
B. Box Fitting-CodeCraft-21 and Codeforces Round #711 (Div. 2)
mongodb
C1. k-LCM (easy version)-Codeforces Round #708 (Div. 2)
Leaky API interface practical development series (13): gooseneck cloud service php-api two-dimensional array parameter transfer solution
史上最简单的录屏转gif小工具LICEcap,要求不高可以试试
第六章 习题(678)【微机原理】【习题】
excel如何实现中文单词自动翻译成英文?这个公式教你了
CSDN原力值
CSDN添加页内跳转和页外指定段落跳转