Perl,在x秒后使脚本超时?

时间:2010-08-06 20:11:09

标签: perl timeout

我一直在搜索这个,但很难直接回答这个问题(因为php似乎有更多关于此主题的信息)..我需要让我的perl脚本在指定的数字后死掉几秒钟,因为,就像现在一样,它们运行时间太长而且堵塞了我的系统,我怎么能这样做才能使整个脚本在指定的秒数后死掉?

我知道杀死脚本的外部解决方案,但我想在perl脚本本身内完成。

由于

2 个答案:

答案 0 :(得分:12)

perldoc -f alarm

[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
}