Hallo, Am Die, 23 Feb 2010, Thomas Michalka schrieb:
David Haller schrieb:
Am Mon, 22 Feb 2010, Thomas Michalka schrieb:
Jedenfalls sterben "D"-Prozesse nicht, wenn der Vaterprozeß stirbt, sie heißen auch passenderweise "Zombie" ;-) Stellt sich bloß die Frage, warum der Kernel Zombies nicht nach einer Weile aus der Prozesstabelle entfernt, recht nützlich sind sie ja wohl nicht mehr, oder?
Das sind keine Zombies. Die sind "Deadlocked" im Status IO-Wait (oder so).
Vermute mal: "Deadlocked" == "Uninterruptible Sleep" ?
So in etwa, ja.
Jedenfalls: wenn ich z.B. auf dem Server mal eben den nfsserver stoppe, dann landet ein cp, das grad von/auf den Server schiebt im Status D. Bis zum NFS-Timeout. Starte ich vorher den nfsserver wieder, wird unbeeindruckt weiterkopiert. Der Prozess läuft und lebt noch, aber ist halt in einem Wartezustand blockiert.
Aha - und ich habe das Skript, das 'mount -o remount,rw /<mpt>' aufrief, im Terminal mit STRG-C abgebrochen. Der mount-Prozess lief weiter, stets lasterzeugend das Mounten versuchend, was aber nichts half, weil das FS ja schon rw gemountet war. Erst nach einer geraumen Weile hat wohl ein Timeout für ein Ende des 'Spuks' gesorgt.
Jup. Die IO-Operation muß halt a) abgeschlossen werden oder b) ein Timeout zuschlagen.
Warum er aber weiterlief, obwohl der Elternprozess abgebrochen wurde, verstehe ich nachwievor nicht.
Hat der nicht mitbekommen.
Ausserdem habe ich noch nicht verstanden, warum ich den Deadlocked Prozess nicht mit kill -KILL <ID> abschießen konnte. Geht das bei solchen Prozessen im IO-Wait-Zustand auch nicht?
Genau. In der Beziehung sind die wie Zombies vom "reagieren" her. Zombies werden dann eben abgeräumt, die im Status D laufen weiter als wäre nix passiert (bzw. reagieren _dann_ auf das Signal, daß per kill oder Strg+c (also kill -INT) reinkam.
Zombies sind hingegen schon komplett tot und existieren ausschließlich noch als Einträge in der Prozesstabellen. Und der bleibt erhalten, bis der "Vaterprozess" (i.d.R. wird das 'init') den Exitstatus abholt. Das erklärt auch gleich, warum ein 'kill -9' nicht funktioniert. Der Zombie ist schon tot.
Dass man Zombies nicht töten kann, leuchtet ein. Dass diese nichts mit den D-Prozessen von oben zu tun haben, sieht man aber auch an der Statusausgabe von ps: für Zombies steht da sinnigerweise ein 'Z' (und dahinter ein '<defunct>').
Killen kann man die D-Prozesse schon (s.o.), sie reagieren aber erst nach Timout / Abschluß des IO.
Da hilft schlicht nur warten (sinnvoll) oder ein Reboot (nicht nötig). Ich beobachte hier recht regelmäßig z.B. cron-Zombies, die nach recht kurzer Zeit dann auch entsorgt werden.
Bei mir gibt es auch gerade einen Zombie, der als Kindprozess eines Epiphany noch herumlungert; der müsste entsorgt werden, wenn der Epiphany beendet wird -- Bingo! :-)
Oder das Elter-Programm guckt nach ner gewissen Zeit auch selber mal, was die Kids so anstellen und räumt ab ;) Beenden muß sich das Elternteil deswegen nicht. -dnh --
Gibt's denn ein "spezifisch" weibliches Tier mit maskuliner Bezeichnung? -- Andreas Höfeld Hausdrachen. -- Volker Gringmuth -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org