Un événement peut aussi surveiller les signaux de style POSIX.
Pour construire un gestionnaire pour un signal, utiliser la méthode
Event::__construct() avec le drapeau
Event::SIGNAL ou la méthode factorielle
Event::signal().
Exemple #1 Gestion d'un signal SIGTERM
<?php
/*
Lancez cet exemple dans un terminal :
$ php examples/signal.php
Dans un autre terminal, trouvez le pid, et lancez le signal SIGTERM, i.e.:
$ 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
Dans le premier terminal, vous devriez attraper ceci :
Signal 15 attrapé
*/
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 "Caught signal $no\n";
$this->base->exit();
}
}
$base = new EventBase();
$c = new MyEventSignal($base);
$base->loop();
?>Il est à noter que les fonctions de rappel d'un signal sont exécutées dans la boucle d'événement après que le signal ne soit survenu, aussi, il est plus sûr pour le signal d'appeler des fonctions depuis la boucle que l'on n'est pas supposé appeler depuis un gestionnaire de signaux POSIX classique.
Voir aussi la » programmation réseau facile, portable et non bloquante avec Libevent ; Construction d'un événement de type signal.