PHP Conference Japan 2024

建構訊號事件

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