Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Max                                  2:5020/400     28 Oct 2000  21:24:03
 To : All
 Subject : Re: Сомнения...
 -------------------------------------------------------------------------------- 
 
 А лучше использовать не wait, а waitpid. Когда сын дохнет, то мы его
 вычищаем.
       my $pid1;
        if ($pid1=fork())
         {# родительский процесс
                     $SIG{CHLD} = sub
                        {
                          my $q;
                          #print "CHLD $pid1!\n";
                         for ($q=0;$q<$proc_num;$q++)     # $proc_num -
 количество прцессов
                           { POSIX::waitpid( -1, &POSIX::WNOHANG ); }
                         };
 ######### somethhing code ########
             }
  else
  {
   # ребенок
 ### something  code#
 }
 "Andrey Brindeew" <abr@mccinet.ru> wrote in message
 news:8tbadk$2an4$1@ddt.demos.su...
 
 > Hello!
 >
 > Стандартная ситуация: CGI-скрипт форкается, родитель говорит броузеру
 > "Bye-bye!", а предварительно отсоединившийся дитенок продолжает работу,
 > потом дохнет. Hо на днях меня админ разочаровал: по его словам в
 
 результате
 
 > некоторых ошибок ядро может выбросить дитенка в зомби, а т.к. за ним никто
 > не следит, то данный PID так и будет висеть в таблице процессов. Проясните
 > пожалуйста ситуацию!
 >
 > Вот используемый мной код:
 >
 >     if (my $pid = fork) {
 >         print "Content-Type: text/plain\n\nProcessing...";
 >     }
 >     else {
 >         die "Can't fork: $!" unless defined $pid;
 >
 >         # Detaching child from parent process
 >         open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
 >         open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
 >         setsid                  or die "Can't start a new session: $!";
 >         open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
 >
 >         # Some stuff
 >         exit 0;
 >     }
 >
 > Еще у админа проскочила хорошая идея, но вот додумать ее я не могу
 > самостоятельно:
 > Имеется два демона, постоянно висящих в памяти (основной и бэкапный).
 > Запустившийся ЦГИ-скрипт просит у демона "дай мне дитенка из такого-то
 > класса, вот тебе параметры для конструктора, и пусть он работает". Демон
 > делает процесс и следит за ним, как только он подохнет, он чистит зомби.
 > Второй демон нужен на случай прибития первого админом (они равноправны):
 
 он
 
 > автоматом поднимает первый и попутно обрабатывает запросы. Все IPC, думаю,
 > будет производится через Unix domain sockets. Ваши идеи?
 >
 > --
 > WBR, Andrey Brindeew
 > http://www.dportal.ru
 > http://www.sat.com.ru
 >
 --- ifmail v.2.15dev5
  * Origin: Rostelecom/Internet Centre (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Сомнения...   Andrey Brindeew   27 Oct 2000 11:23:02 
 Re: Сомнения...   Max   28 Oct 2000 21:24:03 
Архивное /ru.cgi.perl/34950662d7eb.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional