"待处理信号的最大数量(120)超过"是什么意思?

NXT*_*NXT 7 perl fastcgi mod-fastcgi

在Apache mod_fastcgi下运行的My Perl web-app经常会出现如下错误:

在线119处超过未决信号(120)的最大计数.

我已经看到这与文件上传有关,但我不确定这是唯一的时间.我在得到错误之前(或可能在之后)也得到了一个SIGPIPE.

有什么想法吗?

编辑 感谢大家的建议.有人问119行是什么.对不起,应该把它放进去.它是在一段代码中,我在上传的文件上运行病毒检查程序.我不是每次都会得到错误,只是偶尔.

if(open VIRUS_CK, '|/usr/local/bin/clamscan - --no-summary >'.$tmp_file) {

  print VIRUS_CK $data; // THIS IS LINE 119

  close VIRUS_CK;

  if (($? >> 8) == 1) {

    open VIRUS_OUTPUT, '<'.$tmp_file;
    my $vout = <VIRUS_OUTPUT>;
    close VIRUS_OUTPUT;
    $vout =~ s/^stdin:\s//;
    $vout =~ s/FOUND$//;


    print STDERR "virus found on upload: $vout\n";
    return undef, 'could not accept attachment, virus found: '.$vout;
  }
  unlink($tmp_file);
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*lla 7

这意味着操作系统向Perl传递信号的速度比处理它们的速度快,并且已达到饱和点.在操作之间,Perl保存要处理的信号,然后在有机会时处理它们.你得到这个错误是因为在Perl有机会屏住呼吸之前收到的信号太多了.这是致命错误,因此您的Perl进程终止.

解决方案是找出产生如此多信号的因素.有关详细信息,请参见此处


更新:我的原始答案有点不准确,说生成一个新的Perl进程是问题的一部分,而实际上并非如此.我根据@ ysth的评论更新了下面的内容.