Perl脚本在睡眠期间被杀死()

时间:2010-07-15 19:44:28

标签: perl sleep sigkill

我有一个非常简单的perl脚本,在一个函数中执行以下操作:

    if ( legato_is_up() ) {
        write_log("INFO:        Legato is up and running. Continue the installation.");
        $wait_minutes = $WAITPERIOD + 1;
        $legato_up = 1;
    }
    else {
        my $towait = $WAITPERIOD - $wait_minutes;
        write_log("INFO:        Legato is not up yet. Waiting for another $towait minutes...");
        sleep 30;
        $wait_minutes = $wait_minutes + 0.5;
    }

出于某种原因,有时(如3次运行中的1次)脚本被杀死。我不知道谁对杀人负责,我只知道它发生在“睡眠”电话中。

有人能在这里给我一个提示吗?脚本被杀后,它的工作没有完成,这是一个大问题。

感谢。

1 个答案:

答案 0 :(得分:1)

不知道你的系统上还有其他什么,这是任何人的猜测。你可以添加一个信号处理程序,但它会告诉你的是它是什么信号(以及何时),但不是谁发送它:

foreach my $signal (qw(INT PIPE HUP))
{
    my $old_handler = $SIG{$signal};
    $SIG{$signal} = sub {
        print time, ": ", $signal, " received!\n";
        $old_handler->(@_) if $old_handler;
    };
}

如果您没有记录stderr的输出,您可能还需要考虑添加WARN和DIE处理程序。