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

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($baseSIGTERM, 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 .