Re: Wie kille ich Prozesse mit Status "defunct"

Werner Modenbach <[email protected]> Thu, 3 Mar 2005 09:12:21 +0100
Newsgroups gmane.linux.redhat.general.german
Organization ALC Computertechnik GmbH
Message-ID <[email protected]>
Am Mittwoch, 2. März 2005 17:27 schrieb Martin Schmiderer:
> Also ein Zombie entsteht dadurch das sich ein kind-prozess (fork())
> verabschiedet ohne das der eltern-prozess einen wait() erzeugt hat.
> Dadurch kann der kind-prozess nicht aus der Prozessliste genommen
> werden, weil die ppid (parent-prozess-id) noch auf die pid des
> kind-prozesses zeigt. Wenn der eltern-prozess beendet wird, erbt init
> den kind-prozess (nun als Zombie). Init selbst erkennt in der inittab
> das dieser Prozess nicht neu gestartet werden muss (respawn), und erzeugt
> nun einen wait()... da es den prozess aber nicht mehr gibt, kann er sich
> auch nicht mehr beenden. Die Zombies verschwinden also erst wenn init
> stirbt... (Init erkennt einen Zombie, und versucht den Kernel dazu zu
> veranlassen ihn aus der Prozesstabelle zu entfernen, wenn das nicht
> klappt bleibt er bis zum tod von init (reboot) bestehen.)
>
> Das ganze ist eher ein Problem im betroffenen Proggi, als im Kernel...
>
> Tja, wenn Prozesse nicht mehr fork()en koennen, weil es schon so viele
> Zombies gibt, dann kannst Du den Prozess killen, und ihn neu
> starten... damit bekommt er eine neue pid und kann wieder kinder
> produzieren.
>
> Bis sich Zombies auf die Systemlast auswirken, muessen es schon viele
> sein... ich denke mal so 500 - 1000 (?)
>
Hallo Martin,

danke für den Exkurs und die fundierte Info. Diese Zusammenhänge waren mir 
bisher nicht so klar.
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?

- Werner -