php pcntl_alarm - pcntl_signal 处理程序没有触发?
php pcntl_alarm - pcntl_signal handler doesn't fire?
我正在考虑使用 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
我尝试在 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 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_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
我尝试在 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 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";
祝你好运!