# 訊號處理器 訊號處理器會監聽 `Worker` 程序和 `自定義` 程序啟動後,自動註冊到訊號管理器中。 ## 安裝 ``` composer require hyperf/signal ``` ## 釋出配置 您可以通過下面的命令來發布預設的配置檔案到您的專案中: ```bash php bin/hyperf.php vendor:publish hyperf/signal ``` ## 新增處理器 以下我們監聽 `Worker` 程序的 `SIGTERM` 訊號,當收到訊號後,打印出訊號值。 ```php WorkerStopHandler 不適配於 CoroutineServer,如有需要請自行實現 ```php [ Hyperf\Signal\Handler\WorkerStopHandler::class => PHP_INT_MIN ], 'timeout' => 5.0, ]; ``` `WorkerStopHandler` 觸發後,會在所設定的 [max_wait_time](https://wiki.swoole.com/#/server/setting?id=max_wait_time) 配置時間後,關閉掉當前程序。 ## 協程風格服務監聽器配置示例 > 以上預設的監聽器都是適配於非同步風格服務的,如果需要在協程風格服務下使用,可以按照以下自定義配置 ```php container = $container; $this->config = $container->get(ConfigInterface::class); } public function listen(): array { // 協程風格只會存在一個 Worker 程序,故這裡只需要監聽 WORKER 即可 return [ [self::WORKER, SIGTERM], [self::WORKER, SIGINT], ]; } public function handle(int $signal): void { ProcessManager::setRunning(false); foreach (ServerManager::list() as [$type, $server]) { // 迴圈關閉開啟的服務 $server->shutdown(); } } } ```