mshavliuk/mshavliuk-signal-events-bundle

Symfony 扩展包,用于处理进程信号(kill、ctrl+c 等)

1.0.0 2019-06-03 21:06 UTC

This package is auto-updated.

Last update: 2024-09-26 23:15:52 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Build Status codecov

关于

此扩展包提供服务,将处理每个 UNIX 信号的事件发射到您的 Symfony 应用程序中。它依赖于 PCNTL php 扩展,您可以通过运行以下命令来检查:

$ php --ri pcntl

预期输出

pcntl
pcntl support => enabled

安装

mshavliuk/mshavliuk-signal-events-bundle 包添加到您的 composer.json 文件的 require 部分。

$ composer require mshavliuk/mshavliuk-signal-events-bundle

使用方法

自动启动

默认情况下,它将处理所有可能的信号,并在 console.command 事件之后启动,这基本上在每次 php bin/console 运行时都会发生。

在您的 config.yml 中配置此扩展包

mshavliuk_signal_events:
    startup_events:
        - console.command       # to handle signals while console commands (default)
        - kernel.request        # to handle signals while requests processing
    handle_signals:
        - SIGINT                # ctrl+c
        - SIGTSTP               # ctrl+z

手动

要防止自动启动,您可以指定空数组作为 startup_events 配置

mshavliuk_signal_events:
    startup_events: []      # prevent startup

在这种情况下,您可以手动注入 Mshavliuk\MshavliukSignalEventsBundle\Service\SignalHandlerService 并配置要处理的信号

public function __construct(SignalHandlerService $service)
{
    $service->addObservableSignals(['SIGINT', 'SIGHUP']);
}

处理信号事件

您可以通过 EventDispatcherInterface::addListener 函数注册任何回调函数来处理特定事件。请参阅以下示例

$eventDispatcher->addListener(SignalEvent::NAME, function($event, $eventName) use ($output) {
    if($event->getSignal() === SIGINT) {
        $output->writeln('Ctrl+C signal handled');
    }
});

您还可以创建特殊的监听器类,并绑定其公共方法以处理任何信号

services.yaml

App\EventListener\SignalListener:
    tags:
        - { name: kernel.event_listener, event: signal.handled, method: onSignal }

SignalListener.php

class SignalListener
{
    protected $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }


    public function onSignal($event)
    {
        $this->logger->info('handle signal event', ['event' => $event]);
    }
}

有关更多信息,请参阅官方 Symfony 文档

许可证

请参阅 LICENSE