警报不会在时间触发 - perl

时间:2015-04-27 10:15:46

标签: perl

我在我的脚本中使用了一个警报功能,它当时不会触发:

这是我的代码:

    $SIG{ALRM} = sub{

         print"*****Test Fail*****";
    };
    eval{
        alarm(10);
        getTheBootTime();
        alarm(0);
    };
    die $@ if $@;

getTheBootTime();正在执行 5 mints 来执行。我在这做错什么吗?

1 个答案:

答案 0 :(得分:0)

假设getTheBootTime()是一个计算并且没有处理警报和/或睡眠本身,答案如下。

没有尾随print "something";

\n可能无法输出任何内容,因为打印的字符串会卡在缓冲区中,直到打印出换行符。这是默认行为(除非$|设置为true或特定文件描述符已启用autoflush)。

指定的$SIG{ALRM}也不会中断执行(没有die),这是eval / alarm组合所期望的。

所以以下内容可能是$ SIG {ALRM}:

$SIG{ALRM} = sub {
     print "alarm, no interruption, newline\n";
};

$SIG{ALRM} = sub {
     die "alarm, interruption";
};