From 52831b364db643b49b5f0999676874927ec5e292 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 24 Jul 2026 12:57:31 +0800 Subject: [PATCH] bump version to 3.2.9 and implement safe signal handling for Swoole --- src/ZM/Event/Listener/SignalListener.php | 22 ++++++++++++++++------ src/ZM/Framework.php | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/ZM/Event/Listener/SignalListener.php b/src/ZM/Event/Listener/SignalListener.php index a8d77eb9..f5166e24 100644 --- a/src/ZM/Event/Listener/SignalListener.php +++ b/src/ZM/Event/Listener/SignalListener.php @@ -29,9 +29,9 @@ class SignalListener { switch (Framework::getInstance()->getDriver()->getName()) { case 'swoole': - Process::signal(SIGINT, [$this, 'onWorkerInt']); - Process::signal(SIGTERM, [$this, 'onWorkerInt']); - Process::signal(SIGHUP, [$this, 'onWorkerInt']); + $this->safeSignal(SIGINT, [$this, 'onWorkerInt']); + $this->safeSignal(SIGTERM, [$this, 'onWorkerInt']); + $this->safeSignal(SIGHUP, [$this, 'onWorkerInt']); break; case 'workerman': Worker::$globalEvent->add(SIGINT, EventInterface::EV_SIGNAL, [$this, 'onWorkerInt']); @@ -65,9 +65,9 @@ class SignalListener Process::kill(Framework::getInstance()->getDriver()->getSwooleServer()->master_pid, SIGTERM); } }; - Process::signal(SIGINT, $stopHandler); - Process::signal(SIGTERM, $stopHandler); - Process::signal(SIGHUP, $stopHandler); + $this->safeSignal(SIGINT, $stopHandler); + $this->safeSignal(SIGTERM, $stopHandler); + $this->safeSignal(SIGHUP, $stopHandler); } elseif ($driver === 'workerman') { if (!extension_loaded('pcntl') || !extension_loaded('posix')) { logger()->error('请安装 pcntl 和 posix 扩展以支持信号监听'); @@ -130,6 +130,16 @@ class SignalListener } } + /** + * 注册 Swoole 信号处理器,信号已被 Swoole 自身注册时跳过 + */ + private function safeSignal(int $signo, callable $handler): void + { + if (!@Process::signal($signo, $handler)) { + logger()->debug('信号 {signo} 已被系统注册,跳过监听', ['signo' => $signo]); + } + } + /** * 按5次Ctrl+C后强行杀死框架的处理函数 */ diff --git a/src/ZM/Framework.php b/src/ZM/Framework.php index e27982e6..e1f50c60 100644 --- a/src/ZM/Framework.php +++ b/src/ZM/Framework.php @@ -50,7 +50,7 @@ class Framework public const VERSION_ID = 727; /** @var string 版本名称 */ - public const VERSION = '3.2.8'; + public const VERSION = '3.2.9'; /** * @var RuntimePreferences 运行时偏好(环境信息&参数)