全局变量/对象(php)上的pcntl_信号
我试图捕获一个信号(即SIGUSR1)并从一个对象调用一个函数全局变量/对象(php)上的pcntl_信号,php,signals,Php,Signals,我试图捕获一个信号(即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
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
谢谢它通过在类中添加处理程序来工作,如下所示:
class obj {
...
public function __construct() {
...
pcntl_signal(SIGUSR1, function ($signal) {
echo "Caught SIGUSR1...\n";
$this->debug();
});
}
不确定这是否是最好的方法,但似乎有效