Модуль 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();
?>
Обратите внимание, callback-функции запускаются внутри событийного цикла после получения сигнала, поэтому для них безопасно вызывать функции, которые лучше не запускать из стандартных обработчиков сигналов интерфейса POSIX.
Дополнительную информацию даёт раздел » Fast portable non-blocking network programming with Libevent, Constructing Signal Events.