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


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Yuriy Kaminskiy                      2:5020/517.21  22 Nov 2001  20:14:45
 To : Igor Sysoev
 Subject : Re: Re: Вопрос про fork()
 -------------------------------------------------------------------------------- 
 
 
 >>>>> On 16:12 21/11/2001, is@rambler-co.ru writes:
  >> Все работает отлично: скрипт говорит "Рассылка в процессе..." и
  >> рассылает почту. Hо при этом броузер держит соединение с
  >> веб-сервером и заканчивает соединение только после того как скрипт
  >> закончит рассылку писем.
  >> Как бы сделать, что после вывода "Рассылка в процессе..." броузер
  >> сразу бы закрывал соединение?
  IS> Hужно делать два форка для того, чтобы процесс демонизировался:
 
  Хрр. Двойной форк нужен 1. для использования setsid [чтобы
 отсоедениться от управляющего терминала; второй fork нужен, чтобы
 открытие tty не сделало его управляющим терминалом; в данном случае это
 неактуально] 2. чтобы избавиться от zombie. В случае классического cgi
 это также неактуально - потому как "рабочий" процесс и так является
 "внуком" httpd, а его родитель завершает работу.
  В действительности HЕОБХОДИМО закртыть STDIN/STDOUT (все остальное -
 для пущей полноты).
  Итого, исправленное решение:
  use File::Spec ();
  use IO::Handle ();
  use POSIX qw/setsid/;
  STDOUT->flush; # just in case...
  STDERR->flush;
 
  IS> if (!fork) {
 
          open(STDIN, File::Spec->devnull);
          open(STDOUT, ">".File::Spec->devnull);
          setsid;
 
  IS>     if (!fork) {
  IS>         # работа
  IS>     } else {
  IS>         exit 0;
  IS>     }
 
  IS> } else {
  IS>     wait; print;
  IS> }
 
 -- 
 Yuriy Kaminskiy.
 PS perldoc perlipc, аднака.
 --- Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Cuyahoga Valley)
  * Origin: none (2:5020/517.21@fidonet)
 
 

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

 Тема:    Автор:    Дата:  
 Re: Re: Вопрос про fork()   Yuriy Kaminskiy   22 Nov 2001 20:14:45 
Архивное /ru.cgi.perl/1742796a42ef7.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional