> >But you don't need to call setsid() when you fork. Why looking for
> >complicated workaround when you can do it properly without any workaround.
> >Have you ever seen an example of fork that uses setsid?
> 
> Yes, the following is taken straight out from the perlipc documentation:
> -----------------------------
> Complete Dissociation of Child from Parent
> 
> In some cases (starting server processes, for instance) you'll want to 
> completely dissociate the child process from the
> parent. This is often called daemonization. A well behaved daemon will also 
> chdir() to the root directory (so it
> doesn't prevent unmounting the filesystem containing the directory from 
> which it was launched) and redirect its standard
> file descriptors from and to /dev/null (so that random output doesn't wind 
> up on the user's terminal).
> 
>      use POSIX 'setsid';
> 
>      sub daemonize {
>          chdir '/'               or die "Can't chdir to /: $!";
>          open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
>          open STDOUT, '>/dev/null'
>                                  or die "Can't write to /dev/null: $!";
>          defined(my $pid = fork) or die "Can't fork: $!";
>          exit if $pid;
>          setsid                  or die "Can't start a new session: $!";
>          open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
>      }
> 
> The fork() has to come before the setsid() to ensure that you aren't a 
> process group leader (the setsid() will fail if you are). If your system 
> doesn't have the setsid() function, open /dev/tty and use the TIOCNOTTY 
> ioctl() on it instead. See tty(4) for details.
> -----------------
> 
> Am I missing something?

You don't miss anything, the above code is an example of daemonization.
You don't really need to call setsid() for a *forked* process that was
started to execute something and quit. 

It's different if you call system() to spawn the process. But since it's a
child of the parent httpd it's not a leader anyway so you don't need the
extra fork I suppose. Am I correct?

In fact it's good that you've posted this doc snippet, I'll use it as it's
more complete and cleaner. Thanks.


_____________________________________________________________________
Stas Bekman              JAm_pH     --   Just Another mod_perl Hacker
http://stason.org/       mod_perl Guide  http://perl.apache.org/guide 
mailto:[EMAIL PROTECTED]   http://apachetoday.com http://logilune.com/
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/  


Reply via email to