首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php pcntl_alarm - pcntl_signal处理程序不触发?

php pcntl_alarm - pcntl_signal处理程序不触发?
EN

Stack Overflow用户
提问于 2016-10-28 00:07:54
回答 1查看 1.4K关注 0票数 1

我正在考虑使用pcntl_alarm()来做一些事情,所以为了测试它,我运行了一个例子的变体,当您搜索pcntl_alarm时,您在任何地方都可以找到它:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-04 15:29:38

SIGALRM是一个常量,您可以通过以下操作看到:

代码语言:javascript
复制
echo SIGALRM; //14

此外,您还需要在循环中使用派单检查挂起的信号。

代码语言:javascript
复制
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";

祝你好运!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40296067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档