我正在运行一个Perl脚本,它使用反引号进行系统调用。代码段如下所示。
发生的事情是,在运行一段时间后,它有时会打印S3
并且不会向前移动。
当我用top检查系统资源使用情况时,我发现Perl的CPU使用率高达90%,而通常它使用2-3%,因为有一些睡眠语句。似乎反引号进入无限循环。
此外,我确信可执行文件无法无限期运行。
在代码中,我尝试使用闹钟来解决问题;但有时它仍会无限循环。
有什么建议吗?
sub alarmed_method{
my @splitted;
print "Server0 -- $counter - S0 \n";
eval {
print "Server0 -- $counter - S1 \n";
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
print "Server0 -- $counter - S2 \n";
alarm 4;
print "Server0 -- $counter - S3 \n";
@splitted = split("\n", `./my_executable`);
print "Server0 -- $counter - S4 \n";
alarm 0;
print "Server0 -- $counter - S5 \n";
};
if ($@) { # timed out
print "Time out! \n";
die unless $@ eq "alarm\n"; # propagate unexpected errors
}
else {
# didn't
print "Server0 -- $counter - S6 \n";
return @splitted;
}
}