Perl alarm() or Time::Out Without Kernel SIG



我有一个脚本,该脚本在与Web服务器进行通信时偶尔出现。服务器悬挂或响应数据很慢。

我目前正在使用alarm()作为hack来终止脚本的脚本(以免用线程淹没系统),但这会导致CRON错误,这会提醒Sysadmin,Sysadmin确实不希望这200封电子邮件当系统掉落时产生。

是否有另一种方法可以终止不会导致非OK出口和相应电子邮件的脚本(如果需要的话)?

您可以在信号处理程序中扔一个异常,然后在其他地方捕获。

my $success = eval {
    local $SIG{ALRM} = sub { die "Failure" };
    alarm 10;
    do_something_long();
    alarm 0;
    1;
};
if (!$success) {
    warn "Timeout!n" if $verbose;
    exit 0;
}

相关内容

  • 没有找到相关文章

最新更新