pcntl_alarm()
pcntl_alarm
— 为进程设置一个alarm闹钟信号
说明
int pcntl_alarm ( int $seconds )
创建一个计时器,在指定的秒数后向进程发送一个SIGALRM信号。每次对 pcntl_alarm()的调用都会取消之前设置的alarm信号,并返回上一个计时器剩下的秒数。
实例
假设有一个方法
int function add(int a, int b);
我在调用这个方法的时候,希望执行时间不超过一秒。如果超过一秒,就终止执行,并报出异常。
<?php
//declare(ticks = 1);
//让PHP每执行完一句internal statement,
//就检查有没有相应的signal发生,
//不懂没关系,加上就行
declare(ticks = 1);
function add($a,$b){
//这里表示这个函数的执行时间必定大于2秒
sleep(2);
return $a+$b;
}
//1秒后向程序发送SIGALRM信号
pcntl_alarm(1);
//注册信号回调,即SIGALRM信号到达时,程序要干什么?
pcntl_signal(SIGALRM, function(){
//抛出异常
throw new Exception('执行超时');
});
try{
echo add(1,1);
}catch(Exception $e){
echo $e->getMessage();
}
//result: 执行超时