我正在考虑使用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";
古德勒克!