On Tue, 2002-08-13 at 10:17, Ahmed Moustafa wrote:
> Drieux wrote:
> > 
> > On Monday, August 12, 2002, at 11:31 , Ahmed Moustafa wrote:
> > 
> >> Drieux wrote:
> >>
> >>> what you want is
> >>>     how do I create a demon process
> >>> that will be able to run independent of my programme:
> >>> cf:
> >>> http://www.wetware.com/drieux/pbl/Sys/daemon1.txt
> >>
> >>
> >> If it's not possible to use Proc::Daemon, what would be the other 
> >> options,
> >>  please?
> > 
> > 
> > do what you will need to do to daemonize -
> > reset STDIN/STDOUT/STDERR to other FD - in
> > the above case I reset them to a unique log,
> > then it is time to do a 'double fork' of the
> > process into the background - making sure to
> > set the session id enroute.... That normally
> > makes sure that one is no longer attached to
> > a controlling TTY...
> 
> Could you give a sample code, please?
> 
> --Ahmed Moustafa

Proc::Daemon is a pure Perl module, so it is a perfect Perl example of
how to create a daemon in Unix.  Is there a particular reason you cannot
use Proc::Daemon (uncooperative sysadmins)?  If push comes to shove you
could do the unthinkable and just manually copy the code over instead of
using the module.

<snip href="Proc::Daemon">
##---------------------------------------------------------------------------##
##  File:
##      @(#) Daemon.pm 1.2 99/04/17 01:02:34
##  Author:
##      Earl Hood       [EMAIL PROTECTED]
##---------------------------------------------------------------------------##
##  Copyright (C) 1997-1999     Earl Hood, [EMAIL PROTECTED]
##      All rights reserved.
##
##  This program is free software; you can redistribute it and/or
##  modify it under the same terms as Perl itself.
##---------------------------------------------------------------------------##

package Proc::Daemon;

use strict;
use vars qw( $VERSION @ISA @EXPORT_OK );
use Exporter;
@ISA = qw( Exporter );

$VERSION = "0.02";
@EXPORT_OK = qw( Fork OpenMax );

##---------------------------------------------------------------------------##

use Carp;
use POSIX;

##---------------------------------------------------------------------------##
##      Fork(): Try to fork if at all possible.  Function will croak
##      if unable to fork.
##
sub Fork {
    my($pid);
    FORK: {
        if (defined($pid = fork)) {
            return $pid;
        } elsif ($! =~ /No more process/) {
            sleep 5;
            redo FORK;
        } else {
            croak "Can't fork: $!";
        }
    }
}

##---------------------------------------------------------------------------##
##      OpenMax(): Return the maximum number of possible file descriptors.
##      If sysconf() does not give us value, we punt with our own value.
##
sub OpenMax {
    my $openmax = POSIX::sysconf( &POSIX::_SC_OPEN_MAX );
    (!defined($openmax) || $openmax < 0) ? 64 : $openmax;
}

##---------------------------------------------------------------------------##
##      Init(): Become a daemon.
##
sub Init {
    my $oldmode = shift || 0;
    my($pid, $sess_id, $i);

    ## Fork and exit parent
    if ($pid = Fork) { exit 0; }

    ## Detach ourselves from the terminal
    croak "Cannot detach from controlling terminal"
        unless $sess_id = POSIX::setsid();

    ## Prevent possibility of acquiring a controling terminal
    if (!$oldmode) {
        $SIG{'HUP'} = 'IGNORE';
        if ($pid = Fork) { exit 0; }
    }

    ## Change working directory
    chdir "/";

    ## Clear file creation mask
    umask 0;

    ## Close open file descriptors
    foreach $i (0 .. OpenMax) { POSIX::close($i); }

    ## Reopen stderr, stdout, stdin to /dev/null
    open(STDIN,  "+>/dev/null");
    open(STDOUT, "+>&STDIN");
    open(STDERR, "+>&STDIN");

    $oldmode ? $sess_id : 0;
}
*init = \&Init;

##---------------------------------------------------------------------------##

1;
</snip>

-- 
Today is Setting Orange the 6th day of Bureaucracy in the YOLD 3168
Kallisti!

Missile Address: 33:48:3.521N  84:23:34.786W


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to