>From: "Cloyce D. Spradling" <cloyce+xunix at headgear.org> >Subject: Re: [X-Unix] Zombies >Message-ID: <20040616210022.GX320 at monkey.headgear.org> > >On Wed, Jun 16, 2004 at 03:20:40PM -0500, Gretchen Hayman wrote: >: On Jun 14, 2004, at 18:40, James Bucanek wrote: >: > I don't have any handy way of making a zombie process to test this, >: Ah, now there's a helpful little script someone could write! :) > >Handy-dandy zombie factory (use at your own risk): > >----CUT----OW----CUT----OW----CUT---- >#include <sys/types.h> >#include <unistd.h> > >#define ZOMBIES 2 >int main() { > int i; > > for(i = 0; i < ZOMBIES; i++) { > if (fork() == 0) { > /* child */ > exit(0); > } > } > /* if you just exit here, init will reap the zombies */ > sleep(10000); >} >----CUT----OW----CUT----OW----CUT---- From what I remember from many years ago, what *should* happen is that when each child exits, it sends a death_of_child signal to the parent. Here the parent exits without checking, but the 'exit' routine *should* check for signals and perform the 'wait' on each child. 'exit' is not a simple 'program-ends-here', but a drop-back to the outer code that each program is wrapped in to make it part of a process. Also 'init' should check for signals from every orphan it inherits, so a zombie with a parent of init *should* be impossible. I havn't tried it, but Cloyce says the above produces zombies. That indicates a deficiency in OSX/Darwin as compared to other Unix systems; certainly when compared to Bsd4.1 when I learned this stuff. David -- David Ledger - Freelance Unix Sysadmin in the UK. Chair of HPUX SysAdmin SIG of hpUG technical user group (www.hpug.org.uk) dledger at ivdcs.co.uk (also dledger at ivdcs.demon.co.uk) www.ivdcs.co.uk