On Sun, 7 Jun 1998 [EMAIL PROTECTED] wrote:

> > To fix your zombie problem you should IGNORE sigchld or arrange for wait
> > to be called (but not in the signal handler)
> 
> ahh not call wait() in the signal handler...I was just now about to tackle 
> this problem...hmm unfortunatly im not sure where other than the signal 
> handler to call wait...hmm
> maybe ignore is better solution..ill try it 

More incentive to do it in a signal handler, tested code:
void sig_handler (int i) {
  if (i == SIGCHLD) { /* signal based reaper */
    while (wait3(NULL, WNOHANG, 0) > 0);
  }
}

Placing a wait someone else may cause your program to hang until a child
dies.  But note that if you have a select or some other kernel call, you
will exit from that call with some kind of error code (it took me a while
to realize this, never stopped using perror since then).

> ok...according to my book it is ignored by default? I don't understand
> why these zombies are made then?
> maybe I will just add a wait to main loop so it will just perform cleanup
> eveytime a new connection is made?

You can get info back from your child from the wait or somewhere.  So the
kernel keeps your undead child around until you run the wait or die
yourself.  When you die, apparently init, the parent of all, will get rid
of the zombies.

HTH,
Brandon

-----
Brandon Mitchell <[EMAIL PROTECTED]>   "We all know linux is great... it
PGP: finger -l [EMAIL PROTECTED]          does infinite loops in 5 seconds"
Phone: (757) 596-5550                      --Linus Torvalds
Debian Testing Group status: http://bhmit1.home.ml.org/deb/


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to