我正在考虑使用pcntl_alarm()
来做某些事情,所以为了测试它,我运行了你在google pcntl_alarm时随处可见的示例变体:
function signal_handler()
{
echo "Caught SIGALRM\n";
exit;
}
pcntl_signal('SIGALRM', 'signal_handler');
pcntl_alarm(3);
for($i = 1; $i <= 6; $i++) {
echo "$i ";
sleep(1);
}
echo "Normal exit\n";
预期产出:
1 2 3 Caught SIGALRM
实际输出:
1 2 3 Alarm Clock
我尝试在SIGALRM
调用中没有引用pcntl_signal()
(因为它需要一个int),但是警报似乎没有触发:
1 2 3 4 5 6 Normal exit
我假设Alarm Clock
输出是由默认处理程序引起的,我的signal_handler()
没有被调用。 SIGALRM
是正确的常量吗?我错过了什么?我在linux(centos)下通过CLI运行,尝试过php 5.5和5.6。
答案 0 :(得分:1)
SIGALRM是一个常数,你可以看到:
function signal_handler()
{
echo "Caught SIGALRM\n";
exit;
}
pcntl_signal(SIGALRM, 'signal_handler');
pcntl_alarm(3);
for($i = 1; $i <= 6; $i++) {
echo "$i ";
sleep(1);
pcntl_signal_dispatch();
}
echo "Normal exit\n";
您还需要使用检查未决信号 在你的循环中pcntl_signal_dispatch。
.items()
古德勒克!