在perl中调节函数的执行时间

时间:2013-03-28 04:43:12

标签: perl

我有一个命令行函数我想在Perl中执行。但是,我只希望它运行最多X秒。如果在X秒,没有返回结果,我想继续前进。例如,如果我想做类似

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

如果在3秒后没有返回任何值,我怎么能终止等待命令行命令完成?

1 个答案:

答案 0 :(得分: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'对。