Hi perl-people,

I'm not sure if this is beginners stuff, but I'll post here 'cause
it's the only list I'm subscribed to at the moment.

I'm writing a script that will daemonize itself, and then watch some
processes.  If one of those processes die, it will start it again. 
So, I've been reading the perlipc docs and I found this handy code on
proper daemonization:

use POSIX 'setsid';

sub daemonize {
    #it's polite for daemons to chdir to root so that they 
    #don't prevent a filesystem from being unmounted
    chdir '/' or die "Can't chdir to /: $!";

    #it's also polite for daemons to redirect all output to
    #/dev/null so users don't get random output
    open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
    open STDOUT, '>/dev/null' or die "Can't write to /dev/null:$!";
    
    #the parent get's the new child's pid back, the child gets '0' back
    defined( my $pid = fork ) or die "Can't fork: $!";
    
    #here's where I start having problem.  This code assumes that
    #the parent will be exiting, thus leaving the child able
    #to run setsid
    exit if $pid;
    setsid or die "Can't start a new session: $!";

    open STDERR, '>&STDOUT' or die "Can't dup STDOUT: $!";
}

perlipc goes on to explain:
  "The fork() has to come before the setsid() to ensure that you
aren't a process leader (the setsid() will fail if you are).

So, my question is, how do I implement this code WITHOUT the parent
process dieing?

--Errin

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to