Re: Wie kille ich Prozesse mit Status "defunct"

Nils Philippsen <[email protected]> Fri, 04 Mar 2005 17:49:42 +0100
Newsgroups gmane.linux.redhat.general.german
Organization Red Hat GmbH
Message-ID <[email protected]>
On Thu, 2005-03-03 at 09:58 +0100, Martin Schmiderer wrote:
> Hallo Werner,
> 
> >
> > Hallo Martin,
> > 
> > danke für den Exkurs und die fundierte Info. Diese Zusammenhänge waren mir 
> > bisher nicht so klar.
> 
> immer gerne :)
> 
> > Es _SIND_ viele Zombies, sogar sehr viele! Könnte es sein, daß Jörg mit seiner 
> > Vermutung recht hat, daß die Thread-Library einen Knacks hat? Schließlich ist 
> > es unwahrscheinlich, daß plötzlich recht viele Programme nicht mehr auf ihre 
> > Kinder aufpassen, oder?
> 
> Da bin ich mir nicht so sicher... denn wait() und konsorten sind aus der NPTL, und
> wenn die einen Knacks hat, hm? 

wait() ist nicht aus der NPTL, weil es prinzipiell nichts mit threading
zu tun hat. Prinzipiell läuft das ganze so ab:

1. Elternprozess generiert Kindprozess (fork())
2. Kindprozess macht irgendwas
[...]
n-2. Kindrozess beendet sich/stirbt
n-1. Elternprozess bekommt SIGCHLD
n. Elternprozess ruft wait() oder waitpid() um den toten Kindprozess
(Zombie) zu "beerdigen" ;-)

Wenn nun Threading-Anwendungen eine Menge Zombies erzeugen, wird es sich
wohl um LinuxThreads (und nicht NPTL) handeln, denn nur dort haben die
Threads eigene PIDs.

Ciao,
Nils
-- 
     Nils Philippsen    /    Red Hat    /    [email protected]
"They that can give up essential liberty to obtain a little temporary
 safety deserve neither liberty nor safety."     -- B. Franklin, 1759
 PGP fingerprint:  C4A8 9474 5C4C ADE3 2B8F  656D 47D8 9B65 6951 3011