1
我有一個命令行函數,我想在Perl中執行。但是,我只希望它運行達X秒。如果在X秒,沒有結果返回,我想繼續前進。舉例來說,如果我想這樣做perl調整函數執行時間
sub timedFunction {
my $result = `df -h`;
return $result;
}
我怎麼可能殺等待命令行命令來完成,如果它不是在3秒後返回的值?
我有一個命令行函數,我想在Perl中執行。但是,我只希望它運行達X秒。如果在X秒,沒有結果返回,我想繼續前進。舉例來說,如果我想這樣做perl調整函數執行時間
sub timedFunction {
my $result = `df -h`;
return $result;
}
我怎麼可能殺等待命令行命令來完成,如果它不是在3秒後返回的值?
您想使用鬧鐘。
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來超時系統調用。
鈮:可能只有一個本機'警報每個進程一次運行,所以像遞歸這樣的東西是行不通的。 – amon 2013-03-28 08:21:55
檢查此:http://stackoverflow.com/questions/2562931/how-can-i-terminate-a-system-command-with-alarm-in-perl – imran 2013-03-28 05:11:34