从如何指定 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 中的代码已执行,但脚本继续休眠。任何输入表示赞赏