Создание событий для сигналов
Event может отслеживать сигналы в стиле POSIX.
Для создания обработчика для сигнала используйте
конструктор Event::__construct()
с флагом
Event::SIGNAL
или фабричный метод
Event::signal().
Пример #1 Обработка сигнала SIGTERM
<?php
/*
Запускайте в окне терминала:
$ php examples/signal.php
В другом терминальном окне отыщите этот процесс и
пошлите ему сигнал SIGTERM:
$ ps aux | grep examp
ruslan 3976 0.2 0.0 139896 11256 pts/1 S+ 10:25 0:00 php examples/signal.php
ruslan 3978 0.0 0.0 9572 864 pts/2 S+ 10:26 0:00 grep --color=auto examp
$ kill -TERM 3976
В первом терминале вы увидите следующее:
Пойман сигнал 15
*/
class MyEventSignal {
private $base, $ev;
public function __construct($base) {
$this->base = $base;
$this->ev = Event::signal($base, SIGTERM, array($this, 'eventSighandler'));
$this->ev->add();
}
public function eventSighandler($no, $c) {
echo "Пойман сигнал $no\n";
$this->base->exit();
}
}
$base = new EventBase();
$c = new MyEventSignal($base);
$base->loop();
?>
Обратите внимание, что функции обратного вызова запускаются внутри событийного цикла после получения сигнала, так что для них вполне безопасно вызывать функции, которые не следует запускать из обычных обработчиков сигналов POSIX.
Также почитайте » Fast portable non-blocking network programming with Libevent, Constructing Signal Events .