我正在尝试捕获一个信号(即SIGUSR1)并从一个对象调用一个函数。
class obj {
...
public function debug() {
var_dump($this->varfoo);
}
}
$o = new obj();
declare(ticks = 1);
function sig_handler($signo) {
switch ($signo) {
case SIGUSR1:
echo "Caught SIGUSR1...\n";
$o->debug();
break;
default:
// handle all other signals
}
}
pcntl_signal(SIGUSR1, "sig_handler");
一旦发出信号,我就会收到一个php致命错误: 调用成员函数debug();
所以,我尝试了别的东西:
而不是:
function sig_handler($signo) {
...
}
pcntl_signal(SIGUSR1, "sig_handler");
我用过:
pcntl_signal(SIGUSR1, function ($signal, $o) {
echo gettype($o); //this prints null, I was hoping for object
echo "Caught SIGUSR1...\n";
$o->debug();
});
我知道它看起来不对,但我无法弄清楚如何在信号处理程序中传递$ o。
谢谢
答案 0 :(得分:1)
它通过在类中添加处理程序来实现:
class obj {
...
public function __construct() {
...
pcntl_signal(SIGUSR1, function ($signal) {
echo "Caught SIGUSR1...\n";
$this->debug();
});
}
不确定这是否是最佳方式,但似乎正在发挥作用。