2013-03-28 69 views
1

我有一个命令行函数,我想在Perl中执行。但是,我只希望它运行达X秒。如果在X秒,没有结果返回,我想继续前进。举例来说,如果我想这样做perl调整函数执行时间

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

我怎么可能杀等待命令行命令来完成,如果它不是在3秒后返回的值?

+1

检查此:http://stackoverflow.com/questions/2562931/how-can-i-terminate-a-system-command-with-alarm-in-perl – imran 2013-03-28 05:11:34

回答

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'对,否则不建议使用alarm来超时系统调用。

+0

铌:可能只有一个本机'警报每个进程一次运行,所以像递归这样的东西是行不通的。 – amon 2013-03-28 08:21:55