【发布时间】:2012-04-29 14:00:57
【问题描述】:
来自如何为 Perl 系统调用指定超时限制?
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ 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 out 中的代码。 sysread 也继续工作。我有一个休眠 30 秒的 perl 脚本,而不是 sysread。我的超时设置为 10 秒。正如预期的那样,#timed out 中的代码已执行,但脚本继续休眠。感谢任何输入
【问题讨论】: