从我如何指定Perl系统调用的超时限制?为什么在报警信号处理程序中不死不死呢?
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ([email protected]) {
die unless [email protected] eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}
如果发生超时,应该sub { die "alarm\n" };
导致进程结束。我想我无法理解die
。 http://www.cs.cf.ac.uk/Dave/PERL/node111.html表示“die()函数用于退出脚本并显示消息供用户阅读”。但是,对于上面的脚本,脚本将在#timed输出中处理代码。 sysread也继续工作。而不是sysread,我有一个睡眠30秒的perl脚本。我的超时设置为10秒。正如预期的那样,在#timed出来的代码被执行,但该脚本继续sleep.Any输入赞赏
@doon,添加了辅助的答案。 – ikegami 2012-04-18 09:55:59
谢谢。我正在使用perl的UNIX版本。谢谢你让我知道死是一个例外。我没有意识到这一点, – doon 2012-04-18 10:44:47
@doon,相反,有['出口](http://perldoc.perl.org/functions/exit.html)。但是,通常你想'死掉',因为它允许人们如果他们选择处理错误。 – ikegami 2012-04-18 19:55:12