php中pcntl_alarm爲函數設置超時限制【轉】

來源:http://rango.swoole.com/archives/64
原理是在函數執行前先設定一個時鐘信號,若是函數的執行超過規定時間,信號會被觸發,信號處理函數(sig)會拋出一個異常,被外層代碼捕獲。這樣就跳出了原來函數的執行,接着執行下面的代碼。若是函數在規定的時間內,時鐘信號不會觸發,在函數結束後清除時鐘信號,不會有異常拋出php

到php官方查看此函數說明swoole

pcntl_alarm (PHP 4 >= 4.3.0, PHP 5)函數

pcntl_alarm — 爲進程設置一個alarm鬧鐘信號spa

說明int pcntl_alarm ( int $seconds )code

建立一個計時器,在指定的秒數後向進程發送一個SIGALRM信號。每次對 pcntl_alarm()的調用都會取消以前設置的alarm信號。blog

參數seconds 等待的秒數。若是seconds設置爲0,將不會建立alarm信號。進程

返回值返回上次alarm調度(離alarm信號發送)剩餘的秒數,或者以前沒有alarm調度(譯註:或者以前調度已完成) 時返回0。get

 

 1 <?php
 2 declare(ticks = 1);
 3 function a()
 4 {
 5     sleep(10);
 6     echo "a finishi\n";
 7 }
 8 function b()
 9 {
10     echo "Stop\n";
11 }
12 function c()
13 {
14     usleep(100000);
15 }
16 
17 function sig()
18 {
19     throw new Exception;
20 }
21 
22 try
23 {
24     pcntl_alarm(1);
25     pcntl_signal(SIGALRM, "sig");
26     a();
27     pcntl_alarm(0);
28 }
29 catch(Exception $e)
30 {
31     echo "timeout\n";
32 }
33 
34 b();
35 a();
36 b();
相關文章
相關標籤/搜索