我有一个想在 Perl 中执行的命令行函数。但是,我只希望它最多运行 X 秒。如果在 X 秒内没有返回结果,我想继续。例如,如果我想做类似的事情
sub timedFunction {
my $result = `df -h`;
return $result;
}
如果 3 秒后没有返回任何值,我怎么能终止等待命令行命令完成?
我有一个想在 Perl 中执行的命令行函数。但是,我只希望它最多运行 X 秒。如果在 X 秒内没有返回结果,我想继续。例如,如果我想做类似的事情
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 语句在系统调用之后没有执行。
值得注意的是,不建议使用 alarm 来使系统调用超时,除非根据perldoc它是“eval/die”对。