2013-03-28 85 views
1

我有一個命令行函數,我想在Perl中執行。但是,我只希望它運行達X秒。如果在X秒,沒有結果返回,我想繼續前進。舉例來說,如果我想這樣做perl調整函數執行時間

sub timedFunction { 
my $result = `df -h`; 
return $result; 
} 

我怎麼可能殺等待命令行命令來完成,如果它不是在3秒後返回的值?

+1

檢查此:http://stackoverflow.com/questions/2562931/how-can-i-terminate-a-system-command-with-alarm-in-perl – imran 2013-03-28 05:11:34

回答

1

您想使用鬧鐘。

local $SIG{ALRM} = sub { die "Alarm caught. Do stuff\n" }; 

#set timeout 
my $timeout = 5; 
alarm($timeout); 

# some command that might take time to finish, 
system("sleep", "6"); 
# You may or may not want to turn the alarm off 
# I'm canceling the alarm here 
alarm(0); 
print "See ya\n"; 

你顯然不具備當報警信號被捕獲到「死」在這裏。說出你所調用的命令的pid並殺死它。

這裏是從上面的例子輸出:

$ perl test.pl 
Alarm caught. Do stuff 
$ 

注意print語句系統調用後,未執行。

值得注意的是,除非它是根據perldoc的'eval/die'對,否則不建議使用alarm來超時系統調用。

+0

鈮:可能只有一個本機'警報每個進程一次運行,所以像遞歸這樣的東西是行不通的。 – amon 2013-03-28 08:21:55