mshavliuk / mshavliuk-signal-events-bundle
Symfony 扩展包,用于处理进程信号(kill、ctrl+c 等)
1.0.0
2019-06-03 21:06 UTC
Requires
- php: ~7.1
- ext-pcntl: *
- symfony/config: ^4.0
- symfony/console: ^4.0
- symfony/dependency-injection: ^4.0
- symfony/http-kernel: ^4.0
- symfony/process: ^4.0
- symfony/yaml: ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- phpstan/phpstan: ^0.11.8
- phpstan/phpstan-phpunit: ^0.11.2
- phpstan/phpstan-symfony: ^0.11.6
- roave/security-advisories: dev-master
- symfony/phpunit-bridge: ^4.3
This package is auto-updated.
Last update: 2024-09-26 23:15:52 UTC
README
关于
此扩展包提供服务,将处理每个 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。