我正在考虑使用pcntl_alarm()来做一些事情,所以为了测试它,我运行了一个例子的变体,当您搜索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运行,尝试了php5.5和5.6。
发布于 2016-11-04 15:29:38
SIGALRM是一个常量,您可以通过以下操作看到:
echo SIGALRM; //14此外,您还需要在循环中使用派单检查挂起的信号。
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";祝你好运!
https://stackoverflow.com/questions/40296067
复制相似问题