2010-08-23 77 views

回答

3

如果您使用的是CGI(不mod_perl的或快速),它可能是值得只是增加對代碼的頂部以下內容:

alarm 30; # SIGALRM delivered to this process after 30 secs 

如果程序沒有處理程序SIGALRM,它會死。

例子:

use strict; 
use warnings; 
alarm 2; 
my $n = 0; 
while (1) { 
    print "$n\n"; 
    sleep 1; 
    $n++; 
} 
__END__ 
$ perl alr 
0 
1 
Alarm clock 

您可以選擇在發生超時時會發生什麼,就像這樣:

$SIG{ALRM} = sub { 
    # do stuff 
}; 

您使用報警之前,您將放置代碼()。

一個例子可能會發送一封電子郵件,告訴你腳本花費的時間超過了預期的時間,或者其他什麼。

報警,也可作爲監督者的代碼的特定部分,如:

alarm 5; # shouldn't take longer than 5 seconds. if not, die. 
do_stuff(); 
alarm 0; # reset the alarm 
希望

這會有所幫助。

+0

謝謝你,我知道你的意思。 但是,如果我使用mod_perl爲Apache。我在哪裏可以像PHP中那樣設置最大執行時間。有沒有人知道它例如(l)xammp? – Robert 2010-08-24 09:18:38

+1

你可以像上面那樣做同樣的事情,只有在mod_perl下,它會殺死Apache兒童,而不僅僅是CGI。 在mod_perl下。你可以使用類似於: PerlSetEnv PERL_RLIMIT_CPU 120.查看mod_perl文檔! – mfontani 2010-08-24 12:10:41