* hhv <[EMAIL PROTECTED]> schrieb am 27.M�r.1999:
>
> Thomas Booms EDV wrote:
> > Das Problem lag darin, da� wir immer mehr in den letzten Tagen
> > davon bekamen. Schlie�lich haben wir die Maschine nicht einmal
> > mehr rebooten k�nnen. Da lief nichts mehr. Nur einloggen ging noch
> > im Serverraum. Wir tippen daher auf die Zombies.
Wohl kaum, Zombies verbrauchen nur den Platz in der Proze�tabelle.
> > Aber wie kann man diese verhindern? Wenn ich richtig informiert
> > bin, entstehen diese unter anderem durch Clients, die sich nicht
> > korrekt ausloggen. Wenn ich hier falsch liege, lasse ich mich
> > gerne belehren.
> Wenn ein Prozess sich selbst beendet ohne auf eventuelle
> TochterProzesse zu warten, werden diese TochterProzesse nach ihrer
> Terminierung zu Zombies.
Nein. Dann erbt init den Kindproze�, und init macht nichts anderes,
als auf sich terminirende Prozesse zu warten, um sie gegebenfalls
wieder neu zu starten. Erbt init einen Zombie, so wird er gel�scht, da
er nicht in der inittab steht.
> Ich weiss leider auch nichts genaues darueber. Es ist aber wohl
> anzunehmen, dass noch irgendwelche KontrollStrukturen verbleiben,
> die normalerweise, d.h. bei ordnungsgemaesser Terminierung,
> verschwinden wuerden. Ich will mal sehen, ob ich etwas mehr in
> Erfahrung bringen kann.
Ein Proze� kann sich mittels des fork-Systemaufrufs duplizieren. Einer
der Duplikate ist der Elterproze� und das andere der Kindproze�. Der
Elterproze� erh�lt die Proze�nummer des Kindes zur�ck, das Kind eine 0.
Mit dem Systemaufruf wait kann der Elter auf den Tod irgendeines
Kindes warten. Als R�ckgabewert erh�lt er die Proze�nummer des Kindes.
Es kann aber geschehen, da� ein Kind schon beendet ist, bevor der
Elter auf ihm wartet. Da der Elter aber, unter Umst�nden, sp�ter noch
auf das Kind wartet, kann der Kindproze� noch nicht aus der
Proze�tabelle gel�scht werden, es wird zu einem Zombie.
Macht der Elterproze� einen wait, so erh�lt es die Proze�daten des
Kindes, das nun ganz sterben darf. Stirbt der Elter selber, so erbt
init (Proze�nummer 1) all seine Kinder, ganz gleich ob sie noch leben,
oder schon Zombies sind.
Init macht aber, nachdem er die inittab abgearbeitet hat, nur noch
einen wait. Hat er den Proze� selber gestartet, so schaut er in der
inittab nach, ob der Proze� wieder neu gestartet werden mu�. (action:
respawn. Das sind im Wesentlichen die ...gettys) Wenn es der Fall
ist, so startet er den Proze�, ansonsten wartet er weiter und das Kind
darf sterben.
Nur bei einem initlevelwechsel kommt init noch einmal in Fahrt, und
mu� seine Tabelle abarbeiten.
Um Zombies zu l�schen, reicht es somit den Elterproze�, dessen PID im
Feld PPID steht zu terminieren. Ob das gut ist, kann ich nat�rlich
nicht so allgemein sagen.
Wenn ein Proze� am Laufenden Band Zombies erzeugt, so stimmt etwas
nicht. Dein System ist Wahrscheinlich nicht wegen den Zombies so
langsam, sondern wegen dem Elterproze�, der immer noch flei�ig Zombies
produziert, die evtl. bevor sie Zombies werden auch noch etwas machen,
und sich gegenseitig den Prozessor wegnehmen.
Zombies sollten eigentlich h�chstens kurzfristig existieren. Bei einem
Systemtakt von 100 MHz ist eine Minute gleich 6 Milliarden Takte. Wenn
dann der Zombie immer noch nicht weg ist, so wird da wohl nichts mehr
draus.
Hoffe ein wenig geholfen zu haben.
Bernd
--
ML-Archiv: //www.suse.com/Mailinglists/suse-linux/index.html
Etikette: //www.homepages.de/home/cschult news:de.newusers.question
SDB://www.suse.de/sdb/de/html/index.html //localhost/usr/doc/susehilf/index.html
//bolug.uni-bonn.de/wissen //www.math.fu-berlin.de/~guckes //socha.net/dcouln
--
Um aus der Liste ausgetragen zu werden, eine Mail an [EMAIL PROTECTED]
schicken, mit dem Text: unsubscribe suse-linux