Perl反引号系统调用进入无限循环

时间:2013-03-01 08:00:14

标签: linux performance perl system

我正在运行一个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;
    }
}

0 个答案:

没有答案