构建信号事件

Event 也可以监视 POSIX 风格的信号。要构建信号的处理程序,请使用 Event::__construct() 构造函数,并使用 Event::SIGNAL 标志,或者使用 Event::signal() 工厂方法。

示例 #1 处理 SIGTERM 信号

<?php
/*
在终端窗口中启动它:

$ php examples/signal.php

在另一个终端窗口中找出 pid 并发送 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

在第一个终端窗口中,您应该捕获以下内容:

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

请注意,信号回调在信号发生后在事件循环中运行,因此它们可以安全地调用您不应该从常规 POSIX 信号处理程序中调用的函数。

另见 » 使用 Libevent 进行快速可移植的非阻塞网络编程,构建信号事件

添加说明

用户贡献的说明

此页面没有用户贡献的说明。
To Top