Я пытаюсь поймать сигнал (например, 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 в обработчике сигналов.
Спасибо
Это сработало, добавив обработчик внутри класса следующим образом:
class obj {
...
public function __construct() {
...
pcntl_signal(SIGUSR1, function ($signal) {
echo "Caught SIGUSR1...\n";
$this->debug();
});
}
Не уверен, что это лучший способ, но, похоже, работает.
Других решений пока нет …