Using daemon from /etc/init.d/functions
torriem at chem.byu.edu
Fri Mar 30 17:54:31 MDT 2007
On Fri, 2007-03-30 at 17:22 -0600, Steve wrote:
> It's really simple you just fork 2 times before entering the main
> application loop, then let the parent forks die.
> Look at it though, I think this may be a mistake. Looks like it's
> leaving one extra parent just hanging there, because it's not actually
> for daemonizing, it's for multi process spawning.
> I initially picked up this trick as a quick and dirty way of having a
> single server process running that could launch more copies of itself
> to handle load outside its realm. For instance if I have a server
> responsible for a certain set area in a 3D world say -1024,1024 and
> player wants to leave that area, I needed a quick way to spawn a new
> server to handle the area the player was walking into. However I
> didn't want umpteen million processes running empty zones, so doing a
> double fork allowed me to detach the child servers from the main root
> server, and when those zones emptied out the child process would die a
> natural death.
> Anyways for some reason I got that mixed up in my mind with Daemonizing.
No, indeed the recommended procedure for portably deamonizing a server
is to use the double fork. I'm not sure of all the reasons, but it is
in the examples I've seen and I've used that method myself.
According to the page:
"The double fork() thing is meant to make the process an orphan, in fact
making it a child of the init process (usually PID 1).
The setsid() is used to create a new session, making the process a group
leader, dettaching it from the controlling tty (a Ctrl-C won't help ; )
and making it a session leader..."
More information about the PLUG