PHPCon Poland 2024

Construindo eventos de sinalização

O evento também pode observar sinais do estilo POSIX. Para construir um manipulador para um sinal, use o construtor Event::__construct() com a opção Event::SIGNAL ou o método de fábrica (factory) Event::signal().

Exemplo #1 Tratamento do sinal SIGTERM

<?php
/*
Inicie-o em uma janela de terminal:

$ php examples/signal.php

Em outra janela do terminal descubra o pid e envie o SIGTERM, por exemplo:

$ 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

Na primeira janela do terminal você deve pegar o seguinte:

Caught signal 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
"Caught signal $no\n";
$this->base->exit();
}
}

$base = new EventBase();
$c = new MyEventSignal($base);

$base->loop();
?>

Observe que os retornos de chamada de sinal são executados no loop de eventos após a ocorrência do sinal, portanto, é seguro para eles chamarem funções que você não deveria chamar de um manipulador de sinal POSIX regular.

See also » Programação de rede rápida e portátil sem bloqueio com Libevent, Construindo Eventos de Sinal .

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top