o> У меня есть скрипт. Я хочу, что бы если он допустим работает больше минуты я
o> хочу его прибить. Можно ли как нить это реализовать ?
$SIG{ALRM} = sub { die "alarm\n" };
eval {
alarm ($TIMEOUT);
. . .
alarm(0);
};
if ($@ && $@ ne "alarm\n") {
print "Unknow error $@" ;
} elsif ($@) {
print "TimeOut";
} else {
print "Ok";
}
Reference: http://www.opennet.ru/base/dev/alarm_timeout.txt.html
======================================================================================
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n обязателен
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
# если вышли по тайм-ауту $timeout
if ($@) {
die unless $@ eq "alarm\n"; # обработка неожиданных ошибок
}
# все в порядке, сработали пределах установленного времени $timeout
else {
#...
}
Reference: http://blog.perl5doc.ru/perlfunc/2011/03/perlfunc-alarm.html
======================================================================================
Есть функция solve которая в 0.001% случаях может зависнуть. Ее
нужно прервать по таймауту.
Пишу:
warn "started solve\n";
my $solution;
eval {
local $SIG{ALRM} = sub { die };
alarm 5;
$solution = solve($lp);
alarm 0;
};
my $is_timeout = $@;
delete_lp($lp);
if ($is_timeout) {
warn "time out\n";
} else
{
warn "sol $solution\n";
if ($solution == $INFEASIBLE)
{
# INCONSISTENCIES DETECTED
return 0;
}
}
Пишет в stderr "started solve" и все, по таймауту не выходит,
висит в 100% CPU. В чем проблема? как решить?
Reference: http://www.linux.org.ru/forum/development/2431784
Комментариев нет:
Отправить комментарий