Forum Webscript.Ru

Программирование => Perl => Тема начата: commander от 21 Сентября 2005, 10:32:32

Название: зависание fork...
Отправлено: commander от 21 Сентября 2005, 10:32:32
вопросик такой:
есть скриптик примерно такой:

#!/usr/bin/perl
use strict;
my $NI=0;
my $Nq=0;

my $num_th=36;

while (1)
{
....................................................
....................................................

   my @Data_link=th_values(\\@links, $num_th);
   while ($Data_link[$NI])
      {
      my $PID = fork();
      if ($PID == 0) { scan_fs($Data_link[$NI]); exit(); }
      $NI++
      }
      $SIG{\'HANDLER\'} = \\&sig_handler();
     
....................................................
....................................................

      my @Data=th_values(\\@forums_id, $num_th);

      while ($Data[$Nq])
      {
      my $PID = fork();
      if ($PID == 0) { spider_fork($Data[$Nq]); exit(); }
      $Nq++
      }
      $SIG{\'HANDLER\'} = \\&sig_handler1();

 sleep 400;
}
sub sig_handler()
{
wait();
$NI--;
if ($NI==0) { return 1; }
}

sub sig_handler1()
{
wait();
$Nq--;
if ($Nq==0){return 1;}
}

sub signal_catcher
{
wait();
}


scan_fs и  spider_fork парсят некоторые html_ки и пишут в БД (PostgreSQL) результаты... в течении одного дня все замечательно... потом ситуация следующая: процессы висят и даже их деятельность показываеться (top) но в БД новых записей не появляеться и в логах тоже все чисто... в чем может быть проблемма... ?
Название: зависание fork...
Отправлено: NeoNox от 21 Сентября 2005, 13:34:56
1) обложить все дебагом.
2) читать логи БД
3) приведенный код не дает представления где может быть ошибка так как все вертится в while (1) и нет выхода из него.
Название: зависание fork...
Отправлено: NeoNox от 21 Сентября 2005, 13:35:32
Кстати, а сколько детей висит в этот период?