PHPCon Poland 2024

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

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();
?>

Обратите внимание, что функции обратного вызова запускаются внутри событийного цикла после получения сигнала, так что для них вполне безопасно вызывать функции, которые не следует запускать из обычных обработчиков сигналов POSIX.

Также почитайте » Fast portable non-blocking network programming with Libevent, Constructing Signal Events .

add a note

User Contributed Notes

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