1

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

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

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

4

1 回答 1

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 语句在系统调用之后没有执行。

值得注意的是,不建议使用 alarm 来使系统调用超时,除非根据perldoc它是“eval/die”对。

于 2013-03-28T06:35:16.540 回答