Perl, сделать тайм-аут сценария через х секунд? - PullRequest
4 голосов
/ 07 августа 2010

Я искал по этому вопросу, но на удивление трудно найти прямой ответ на этот вопрос (так как, похоже, у php гораздо больше информации по этой теме) .. Мне нужно заставить мой скрипт perl умереть после указанного числасекунд, потому что, как сейчас, они работают слишком долго и забивают мою систему, как я могу сделать так, чтобы весь скрипт просто умирал через указанное количество секунд?

Я знаю о внешних решениях дляубить скрипт, но я бы хотел сделать это из самого скрипта perl.

Спасибо

Ответы [ 2 ]

12 голосов
/ 07 августа 2010

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
2 голосов
/ 07 августа 2010

См. alarm в perldoc :

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...