Gzip kaputt?

Twins

New Member
Hi,

ich betreue einen RootDS meines Freundes von S4Y und habe da mal eine Frage. Die Eingabe von ps aux gab mir zwei interessante Einträge in der Prozessliste aus:

1.) logrota <defunct> (Benutzer root)
2.) [gzip] <defunct> (Benutzer root)

Was machen diese zwei Prozesse? Und wofür steht das <defunct>? Ist da evtl. was kaputt?
OS ist Debian 3.1 mit Plesk.
Danke für eure Antworten.

Viele Grüße,
Twins
 
Im POSIX-Standard ist vorgesehen, dass jeder[1] Prozess einen Eltern-Prozess hat (der diesen Prozess gestartet hat). Der Eltern-Prozess ist dafür zuständig, das Beenden des Kind-Prozesses zu überwachen und dabei den Exit-Status abzufragen.
Wenn nun ein Kind-Prozess beendet wird (sei es beabsichtigt oder unbeabsichtigt durch einen Fehler) und der Eltern-Prozess den Exit-Status nicht (mit der C-Funktion waitpid()) abfragt, entsteht ein sogn. Zombie-Prozess. Diese Prozesse existieren nicht wirklich, d.h. man kann ihnen nicht mit kill ein Signal schicken und sie damit beenden und sie brauchen außer ihrer Kernel-Internen u-structure keine weiteren Ressourcen des Systems -- sie warten lediglich darauf, dass endlich der Vater-Prozess den Status abfragt, damit sie richtig beendet werden können...
Zombie-Prozesse entstehen hauptsächlich durch schlampige Programmierung, wenn also der Vater-Prozess seinen Aufgaben nicht in jedem Fall nachkommt. Sie verschwinden wieder, sobald der Vater-Prozess die waitpid()-Funktion aufruft oder selber beendet wird, da in letzterem Fall der init-Prozess (mit der Prozess-ID 1) diese untoten Kinder "erbt" und dann ihren Exit-Status abfragt, wodurch sie dann regulär beendet werden können.

In Deinem Fall ist wohl irgendwas schief gelaufen, so dass die Prozesse an einer völlig unerwarteten Stelle beendet wurden und der aufrufende Prozess das nicht mitbekommen hat. Aus diesem Grund wirst Du wahrscheinlich nichts in den log-Files finden -- nachschauen solltest Du dort aber trotzdem. Schau mal nach, ob vielleicht der Platz auf der Platte nicht mehr ausreicht, oder Ähnliches.
Es könnte auch helfen, das Logrotate-Script (/etc/cron.daily/logrotate), das sonst durch den cron-Daemon aufgerufen wird, von Hand zu starten, um eventuelle Fehlermeldungen zu sehen, die andernfalls in /dev/null landen würden.

Viele Grüße,
LinuxAdmin

[1] Ausnahme ist der init-Prozess.
 
Danke für deine Aufklärung! :)

Allerdings habe ich das Problem schon wieder. Habe den ganzen Server neugestartet und es war weg und knapp einen Tag später ist es schon wieder so.
Ich kann den Server also so oft neustarten wie ich will, es bringt nichts, immer <defunct>.
 
Ich bin mal schreibfaul und verfasse im Gegensatz zu LinuxAdmin nichts eigenes:
Zombie (EDV) - Wikipedia
Daraus ergeben sich zwei einfache Methoden, unnötige Zombies loszuwerden: Zum einen kann man manuell dem Vaterprozess des Zombies (laut PPID-Angabe in der Prozesstabelle) das Signal SIGCHLD senden, auf der Kommandozeile z.B. mittels kill -CHLD <PID des Vaterprozesses> . Reagiert der Vater darauf nicht, so kann man den Vaterprozess beenden, damit das Zombie-Kind vom init-Prozess adoptiert und sofort danach durch Abfrage seines Zustands endgültig gelöscht wird.
Wer der Vaterprozess ist sieht du z.B. mit pstree -p. Wenn der Vaterprozess wirklich cron ist sollte ein /etc/init.d/cron restart reichen.
 
Last edited by a moderator:
Back
Top