fix(ws_server): 添加父进程状态检查以处理异常退出
在数据库维护子进程中添加父进程状态检查,当父进程异常退出时自动终止子进程
This commit is contained in:
@@ -479,6 +479,10 @@ if (extension_loaded('pcntl')) {
|
|||||||
// 每30秒检查一次数据库连接
|
// 每30秒检查一次数据库连接
|
||||||
$checkInterval = 30; // 秒
|
$checkInterval = 30; // 秒
|
||||||
|
|
||||||
|
// 保存父进程PID
|
||||||
|
$parentPid = getppid();
|
||||||
|
ws_echo("[数据库维护子进程] 父进程PID: {$parentPid}");
|
||||||
|
|
||||||
// 设置子进程的信号处理
|
// 设置子进程的信号处理
|
||||||
pcntl_signal(SIGTERM, function() {
|
pcntl_signal(SIGTERM, function() {
|
||||||
ws_echo("[数据库维护子进程] 收到终止信号,正在退出...");
|
ws_echo("[数据库维护子进程] 收到终止信号,正在退出...");
|
||||||
@@ -489,6 +493,13 @@ if (extension_loaded('pcntl')) {
|
|||||||
// 检查是否有信号需要处理
|
// 检查是否有信号需要处理
|
||||||
pcntl_signal_dispatch();
|
pcntl_signal_dispatch();
|
||||||
|
|
||||||
|
// 检查父进程是否仍然存在
|
||||||
|
$currentParentPid = getppid();
|
||||||
|
if ($currentParentPid === 1) {
|
||||||
|
ws_echo("[数据库维护子进程] 父进程已退出,正在退出...");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 尝试执行一个简单的数据库查询来测试连接
|
// 尝试执行一个简单的数据库查询来测试连接
|
||||||
$addon_model = new Addon();
|
$addon_model = new Addon();
|
||||||
|
|||||||
Reference in New Issue
Block a user