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

在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: $voutn";
    return undef, 'could not accept attachment, virus found: '.$vout;
  }
  unlink($tmp_file);
}
    
已邀请:
这意味着操作系统向Perl传递信号的速度比处理它们的速度快,并且已达到饱和点。在操作之间,Perl保存要处理的信号,然后在有机会时处理它们。你得到这个错误是因为在Perl有机会屏住呼吸之前收到太多信号。这是致命错误,因此您的Perl进程终止。 解决方案是找出产生如此多信号的因素。有关详细信息,请参见此处 更新:我的原始答案有点不准确,说生成一个新的Perl进程是问题的一部分,而实际上并非如此。我根据@ ysth的评论更新了下面的内容。     

bab

我会手淫,因为我很长一段时间没有使用过mod_fastcgi,自从我查看它的文档以来已经有一段时间了。 我猜你的Perl模块是非分叉的,但需要一段时间才能运行,这样客户端关闭需要一段时间来处理。有关FastCGI使用的信号,以及程序可能希望如何处理这些信号(包括
SIGPIPE
),请参阅FastCGI Apache模块mod_fastcgi下的注释。     

要回复问题请先登录注册