我有一个命令行函数我想在Perl中执行。但是,我只希望它运行最多X秒。如果在X秒,没有返回结果,我想继续前进。例如,如果我想做类似
的事情sub timedFunction {
my $result = `df -h`;
return $result;
}
如果在3秒后没有返回任何值,我怎么能终止等待命令行命令完成?
答案 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'对。