From 981b7eb6831a34471ea0125a7be966e10e9a5995 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 12 Feb 2023 23:59:09 +0800 Subject: [PATCH] fix workerman signal handler stuck bug --- src/ZM/Event/Listener/SignalListener.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/ZM/Event/Listener/SignalListener.php b/src/ZM/Event/Listener/SignalListener.php index 4b21d715..2bd2055d 100644 --- a/src/ZM/Event/Listener/SignalListener.php +++ b/src/ZM/Event/Listener/SignalListener.php @@ -32,12 +32,11 @@ class SignalListener Process::signal(SIGINT, [$this, 'onWorkerInt']); break; case 'workerman': - if (!extension_loaded('pcntl')) { - logger()->error('请安装 PCNTL 扩展以支持 SIGINT 监听'); - break; + Worker::$globalEvent->add(SIGINT, EventInterface::EV_SIGNAL, [$this, 'onWorkerInt']); + Worker::$globalEvent->add(SIGTERM, EventInterface::EV_SIGNAL, fn () => Worker::stopAll(15)); + if (function_exists('pcntl_signal')) { + pcntl_signal(SIGUSR1, SIG_IGN, false); } - pcntl_signal(SIGINT, [$this, 'onWorkerInt']); - pcntl_signal(SIGUSR1, SIG_IGN, false); Worker::$globalEvent->add(SIGUSR1, EventInterface::EV_SIGNAL, '\Workerman\Worker::signalHandler'); break; }