我一直在搜索这个,但很难直接回答这个问题(因为php似乎有更多关于此主题的信息)..我需要让我的perl脚本在指定的数字后死掉几秒钟,因为,就像现在一样,它们运行时间太长而且堵塞了我的系统,我怎么能这样做才能使整个脚本在指定的秒数后死掉?
我知道杀死脚本的外部解决方案,但我想在perl脚本本身内完成。
由于
答案 0 :(得分:12)
[sinan@kas ~]$ cat t.pl
#!/usr/bin/perl
use strict; use warnings;
use Try::Tiny;
try {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 5;
main();
alarm 0;
}
catch {
die $_ unless $_ eq "alarm\n";
print "timed out\n";
};
print "done\n";
sub main {
sleep 20;
}
输出:
[sinan@kas ~]$ time perl t.pl timed out done real 0m5.029s user 0m0.027s sys 0m0.000s
答案 1 :(得分:2)
请参阅perldoc中的alarm
:
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
}