Date: Wed, 6 Sep 2000 13:36:53 -0700 (PDT) From: Mikko Tyolajarvi <mikko@dynas.se> To: Cy.Schubert@uumail.gov.bc.ca Cc: freebsd-stable@freebsd.org Subject: Re: running lyris for linux makes many zombies Message-ID: <200009062036.NAA19883@explorer.rsa.com> References: Your message of "Wed, 06 Sep 2000 13:03:14 EDT." <14774.30930.120103.685216@onceler.kciLink.com> <200009061756.e86Huaa75647@cwsys.cwsent.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In local.freebsd-stable you write: >In message <14774.30930.120103.685216@onceler.kciLink.com>, Vivek Khera >writes: >> On a FreeBSD 4.1-S cvsup'd yesterday, I'm running Lyris 4.0 for linux >> (with the security patches installed). I had been running this on a >> RedHat 6.0 system quite well, but I'd rather rid myself of that system >> ;-) >> >> Anyhow, I'm getting *lots* of zombie processes being left around after >> processing a few messages, and the number keeps growing. This did not >> happen on the "real" linux system. >> >> Is there some knob I can turn on in the linux compatibility system to >> get the zombies to be reaped properly? I have COMPAT_LINUX defined in >> my kernel so the linux compat is statically linked into the kernel. >Lyris is failing to issue a wait(2) call to obtain the exit status of >children that have terminated. The kernel will keep a a process table >entry for the terminated child until the exit status has been fetched >by its parent. >My guess the reason Linux doesn't have any zombies is that the Linux >init(8) is getting involved to fetch the status and clean up after the >application. This is not standard UNIX. What FreeBSD is doing, e.g. >nothing as it's an application issue, is the correct thing to do. >IIRC, there are some differences between SYSV and BSD in this regard, >though I cannot remember the details and I don't have Stevens' book >here to reference. On SYSV (and Linux) doing "signal(SIGCHLD, SIG_IGN)" is sufficient to get rid of zombies. On BSD, you have to use sigaction() with the SA_NOCLDWAIT flag to get the same result. (Two minutes later) Yes, the following Q&D program does not leave a zombie child on linux. But when the linux-compiled binary is run under the linuxulator, it does leave a zombie. I.e. linuxulator bug. #include <signal.h> int main() { int pid; signal(SIGCHLD, SIG_IGN); if ((pid = (int)fork()) == 0) { exit(0); } printf("Child is %d, go look for it!\n", pid); sleep(30); } The same source compiled under FreeBSD also leaves a zombie, but that is an entirely different matter (it is supposed to). $.02, /Mikko -- Mikko Työläjärvi_______________________________________mikko@rsasecurity.com RSA Security To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009062036.NAA19883>