From 0668bc39da691aca2b0adbd121d13cf2be641ce9 Mon Sep 17 00:00:00 2001 From: Kirill Ka Date: Wed, 4 Mar 2026 03:37:25 +0400 Subject: [PATCH 1/2] #552 Move signal handling from queue component to controller --- CHANGELOG.md | 1 + src/drivers/amqp_interop/Command.php | 31 ++++++++++++++++++++++++++++ src/drivers/amqp_interop/Queue.php | 22 -------------------- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e16577df..86a092c96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Yii2 Queue Extension Change Log - Enh #503: All dependent packages for supported drivers have been updated to the latest versions (@s1lver) - Enh #503: The `opis/closure` package did not support PHP 8.1 and was replaced by the `laravel/serializable-closure` package (@s1lver) - Enh #544: Applying Yii2 coding standards (@s1lver) +- Enh #552: Move signal handling from AMQP Interop queue component to controller (@snewer) 2.3.8 January 08, 2026 ---------------------- diff --git a/src/drivers/amqp_interop/Command.php b/src/drivers/amqp_interop/Command.php index de7850ad6..e993b5130 100644 --- a/src/drivers/amqp_interop/Command.php +++ b/src/drivers/amqp_interop/Command.php @@ -26,6 +26,37 @@ class Command extends CliCommand */ public CliQueue $queue; + /** + * @inheritdoc + */ + public function init(): void + { + parent::init(); + + // https://github.com/yiisoft/yii2-queue/issues/379 + if (PHP_MAJOR_VERSION >= 7 && extension_loaded('pcntl') && function_exists('pcntl_signal')) { + // https://github.com/php-amqplib/php-amqplib#unix-signals + $signals = [SIGTERM, SIGQUIT, SIGINT, SIGHUP]; + + foreach ($signals as $signal) { + $oldHandler = null; + // This got added in php 7.1 and might not exist on all supported versions + if (function_exists('pcntl_signal_get_handler')) { + $oldHandler = pcntl_signal_get_handler($signal); + } + + pcntl_signal($signal, static function ($signal) use ($oldHandler) { + if ($oldHandler && is_callable($oldHandler)) { + $oldHandler($signal); + } + + pcntl_signal($signal, SIG_DFL); + posix_kill(posix_getpid(), $signal); + }); + } + } + } + /** * @inheritdoc */ diff --git a/src/drivers/amqp_interop/Queue.php b/src/drivers/amqp_interop/Queue.php index 62a2553c1..2a39c3ca3 100644 --- a/src/drivers/amqp_interop/Queue.php +++ b/src/drivers/amqp_interop/Queue.php @@ -294,28 +294,6 @@ public function init(): void Event::on(BaseApp::class, BaseApp::EVENT_AFTER_REQUEST, function () { $this->close(); }); - - if (extension_loaded('pcntl') && function_exists('pcntl_signal') && PHP_MAJOR_VERSION >= 7) { - // https://github.com/php-amqplib/php-amqplib#unix-signals - $signals = [SIGTERM, SIGQUIT, SIGINT, SIGHUP]; - - foreach ($signals as $signal) { - $oldHandler = null; - // This got added in php 7.1 and might not exist on all supported versions - if (function_exists('pcntl_signal_get_handler')) { - $oldHandler = pcntl_signal_get_handler($signal); - } - - pcntl_signal($signal, static function ($signal) use ($oldHandler) { - if ($oldHandler && is_callable($oldHandler)) { - $oldHandler($signal); - } - - pcntl_signal($signal, SIG_DFL); - posix_kill(posix_getpid(), $signal); - }); - } - } } /** From b1181f831e98b0573977cd869fc3b0a4a0d2f518 Mon Sep 17 00:00:00 2001 From: Kirill Ka Date: Wed, 4 Mar 2026 03:50:55 +0400 Subject: [PATCH 2/2] Remove redundant PHP version check --- src/drivers/amqp_interop/Command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/amqp_interop/Command.php b/src/drivers/amqp_interop/Command.php index e993b5130..cb4d3c5de 100644 --- a/src/drivers/amqp_interop/Command.php +++ b/src/drivers/amqp_interop/Command.php @@ -34,7 +34,7 @@ public function init(): void parent::init(); // https://github.com/yiisoft/yii2-queue/issues/379 - if (PHP_MAJOR_VERSION >= 7 && extension_loaded('pcntl') && function_exists('pcntl_signal')) { + if (extension_loaded('pcntl') && function_exists('pcntl_signal')) { // https://github.com/php-amqplib/php-amqplib#unix-signals $signals = [SIGTERM, SIGQUIT, SIGINT, SIGHUP];