PHP pcntl_alarm - pcntl_signal处理程序不触发?



我正在考虑使用pcntl_alarm(),所以为了测试它,我运行了一个例子的变体,当你搜索pcntl_alarm:

function signal_handler()
{
    echo "Caught SIGALRMn";
    exit;
}
pcntl_signal('SIGALRM', 'signal_handler');
pcntl_alarm(3);
for($i = 1; $i <= 6; $i++) {
    echo "$i ";
    sleep(1);
}
echo "Normal exitn";
预期输出:

1 2 3 Caught SIGALRM

实际输出:

1 2 3 Alarm Clock

我尝试在pcntl_signal()调用中不引用SIGALRM(因为它期望一个int),但随后警报似乎没有触发:

1 2 3 4 5 6 Normal exit

我假设Alarm Clock输出是由于默认处理程序和我的signal_handler()没有被调用。SIGALRM是正确的常数吗?我错过了什么?我在linux (centos)下通过CLI运行,尝试了php 5.5和5.6。

SIGALRM是一个常量,你可以这样做:

echo SIGALRM; //14

还需要检查挂起的信号使用Pcntl_signal_dispatch .

function signal_handler()
{
    echo "Caught SIGALRMn";
    exit;
}
pcntl_signal(SIGALRM, 'signal_handler');
pcntl_alarm(3);
for($i = 1; $i <= 6; $i++) {
    echo "$i ";
    sleep(1);
    pcntl_signal_dispatch();
}
echo "Normal exitn";

古德勒克!

相关内容

  • 没有找到相关文章

最新更新