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