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


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Ilia Vinokurov                       2:5020/400     30 Nov 2001  23:05:14
 To : Katherine M. Tolkacheva
 Subject : Re: Вопрос про fork()
 -------------------------------------------------------------------------------- 
 
 > Хех, у меня были те же самые грабли. Буквально один в один. Только меня
 > не спасло двойное форканье, зато помогло очень простое действие:
 >
 > &do_cgi_stuff;
 >
 > close(STDIN);
 > close(STDOUT);
 > close(STDERR);
 >
 > &send_email;
 >
 > exit;
 
 После брождения по SPAN родил:
 покопайся в пакете Proc::*. Там много чего интересного...
 
 package Proc::DaemonFunc;
 
 require Exporter;
 require POSIX;
 require 'sys/syscall.ph';
 use Carp;
 use strict;
 
 use vars qw(@ISA @EXPORT $VERSION);
 $VERSION = "1.00";
 @ISA = qw(Exporter);
 @EXPORT = qw(daemonfunc);
 
 sub daemonfunc{
  my ($dfunc, $efunc, @args) = @_;
 
   my $pid;
   {
   if ($pid = fork()) {
      # parent
      return $pid;
   } elsif (defined $pid) {
      # child
 
    # Устанавливаем путь по умолчанию
    # $ENV{PATH} = '/bin:/usr/bin';
    # Чисто для прикола
    $0='httpd';
    # Делаем корень текужим каталогом
    #chdir '/';
 
    # Отключаемся от терминала
    close STDOUT; close STDERR; close STDIN;
 
    # Создаем новую сессию и становимся лидером
    # группы процессов, чтоб нас случайно не прибили
    syscall(&SYS_setsid);
 
    # Перехватываем сигналы, для корректного выхода
    $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'ignore' unless defined
 $efunc;
    $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'efunc' if defined $efunc;
    $SIG{'HUP'} = 'ignore';
 
    # Делаем наши темные дела
      &$dfunc(@args);
 
    # Выходим
    &$efunc(@args);
 
   } elsif ($! == &POSIX::EAGAIN) {
      my $o0 = $0;
      $0 = "$o0: waiting to fork";
      sleep 5;
      $0 = $o0;
      redo;
   } else {
      croak "Can't fork: $!";
   }
   }
 };
 
 1;
 --- ifmail v.2.15dev5
  * Origin: posted via PTT-Teleport ISP, AS6795 (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Вопрос про fork()   Dmitry Chertischev   21 Nov 2001 16:24:57 
 Re: Вопрос про fork()   Igor Sysoev   21 Nov 2001 17:12:15 
 Re: Вопрос про fork()   Dmitry Chertischev   21 Nov 2001 23:23:53 
 Re: Вопрос про fork()   Ilia Vinokurov   22 Nov 2001 00:12:57 
 Re: Вопрос про fork()   Dmitry Chertischev   22 Nov 2001 00:48:04 
 Re: Вопрос про fork()   Dmitry Chertischev   22 Nov 2001 01:04:29 
 Re: Вопрос про fork()   Dmitry Chertischev   22 Nov 2001 01:16:47 
 Re: Вопрос про fork()   Ilia Vinokurov   22 Nov 2001 20:53:52 
 Re: Вопрос про fork()   Katherine M. Tolkacheva   29 Nov 2001 11:14:28 
 Re: Вопрос про fork()   Ilia Vinokurov   30 Nov 2001 23:05:14 
Архивное /ru.cgi.perl/55009480de8f.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional