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 -