Создаёт события для сигналов

Модуль 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.