Я пишу на Perl впервые, и Интернет говорит мне, что я могу использовать сигнализацию, если у меня длительный SQL-запрос.Мне нужно запустить SP, который будет работать часами в Perl, и я хотел бы установить ограничение по времени.Ниже приведен последний шаг моих кодов, но я получаю ошибку сегментации , когда процесс выполняется дольше, чем мое время ожидания, в этом случае sleep (20).Журналы показывают, что он закончил печать --- 1 ---- и затем ошибка сегментации.Как я могу это исправить?
Я попытался вывести sub DelRef {} в отдельный файл .pl и прокомментировать часть $ db в третьей строке, чтобы проверить, работает ли аварийный сигнал, и он работал нормально.Я запутался, какая часть пошла не так и стала причиной ошибки сегментации.
sub DelRef {
print "starting defRefData\n";
$db = new Sybapi($user, $password, $server, $margin_database);
print "entering eval\n";
my $timeout = 10;
eval {
local $SIG{ALRM} = sub { die "timeout\n" };
print "inside eval now\n";
alarm($timeout);
print "---1----\n";
#sleep(5); --working fine
sleep(20); #not working,
#$db->exec_sql("exec CPN_Margins..clean_up_refData_db '$XrefCode'");
print "----2----\n";
alarm(0);
};
#alarm(0);
print "out of eval\n";
if($@)
{
#die unless $@ eq "timeout\n";
if($@ =~ "timeout\n")
{
warn "Timed out!\n";
#exit 0;
}
else{
print $@;
}
}
}
&DelRef();
print "process is done\n";
$db->close();