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 信號處理程式中不應呼叫的函式是安全的。