信号处理器

信号处理器会监听 Worker 进程和 自定义 进程启动后,自动注册到信号管理器中。

安装

  1. composer require hyperf/signal

添加处理器

以下我们监听 Worker 进程的 SIGTERM 信号,当收到信号后,打印出信号值。

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Signal;
  4. use Hyperf\Signal\Annotation\Signal;
  5. use Hyperf\Signal\SignalHandlerInterface;
  6. /**
  7. * @Signal
  8. */
  9. class TermSignalHandler implements SignalHandlerInterface
  10. {
  11. public function listen(): array
  12. {
  13. return [
  14. [SignalHandlerInterface::WORKER, SIGTERM],
  15. ];
  16. }
  17. public function handle(int $signal): void
  18. {
  19. var_dump($signal);
  20. }
  21. }

因为 Worker 进程 SIGTERM 信号被捕获后,无法正常退出,所以用户可以直接 Ctrl+C 退出,或者修改 signal.php 配置

  1. <?php
  2. declare(strict_types=1);
  3. return [
  4. 'handlers' => [
  5. Hyperf\Signal\Handler\WorkerStopHandler::class => PHP_INT_MIN
  6. ],
  7. 'timeout' => 5.0,
  8. ];

WorkerStopHandler 触发后,会在 max_wait_time 时间后,关掉当前进程。