innmind / signals
每个信号管理多个回调
3.1.0
2023-09-23 12:21 UTC
Requires
- php: ~8.2
- innmind/immutable: ~4.0|~5.0
Requires (Dev)
- innmind/black-box: ~5.5
- innmind/coding-standard: ~2.0
- nikic/php-parser: ^4.13.2
- phpunit/phpunit: ~10.2
- vimeo/psalm: ~5.12
This package is auto-updated.
Last update: 2024-09-23 14:44:23 UTC
README
在 pcntl_signal
之上的小抽象,允许为单个信号注册多个可调用对象。
安装
composer require innmind/signals
使用方法
use Innmind\Signals\{ Handler, Signal, Info, }; $handler = new Handler; // automatically enable async signal at instanciation $handler->listen(Signal::interrupt, function(Signal $signal, Info $info): void { echo 'foo'; }); $handler->listen(Signal::interrupt, function(Signal $signal, Info $info): void { echo 'bar'; }); // do some logic here
当以上脚本在终端中执行,并且你使用 ctrl + c
来停止进程时,它会打印 foobar
而不是停止脚本。
重要:当在程序中使用 pcntl_fork
时,请记住在子进程中通过 $handler->reset()
重置处理程序,以避免两个进程调用监听器。一旦重置,处理程序就不再可用,你需要构建一个新实例。
如果出于某种原因需要删除处理程序(例如子进程结束),你可以调用 $handler->remove($listener)
(移除所有信号的处理程序监听器)。