Skip site navigation (1)Skip section navigation (2)
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>