我在我的脚本中使用了一个警报功能,它当时不会触发:
这是我的代码:
$SIG{ALRM} = sub{
print"*****Test Fail*****";
};
eval{
alarm(10);
getTheBootTime();
alarm(0);
};
die $@ if $@;
getTheBootTime();正在执行 5 mints 来执行。我在这做错什么吗?
答案 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";
};