PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suse 9.1 / kill -9 geht ab und zu nicht



BiugEE
28.05.04, 09:17
hallo,

ich nutze jetzt schon auf 3 rechnern suse 9.1 und habe andauernd probleme das wenn ein programm hängt ich dieses nicht mehr benenden kann.

sklave:~ # ps ax | grep mlnet
21161 pts/69 Ds+ 14:20 ./mlnet
21163 pts/69 Z+ 0:00 [mlnet] <defunct>
23892 pts/76 S+ 0:00 grep mlnet

kill -9 21161
kill -9 21163
kill -9 23892

sklave:~ # ps ax | grep mlnet
21161 pts/69 Ds+ 14:20 ./mlnet
21163 pts/69 Z+ 0:00 [mlnet] <defunct>
23892 pts/76 S+ 0:00 grep mlnet

ich bekomme das einfach nicht abgeschossen. ein kollege von mir hat genau das gleiche problem. nur ein neustart geht dann noch. sogar ein reboot ist nicht mehr möglich.
das scheint mir echt ein suse bug zu sein :(
hat da einer eine idee?

drummermonkey
28.05.04, 09:23
Hi
sorry für das mega-off-topic das hier total unkonstruktiv ist, aber geht es euch manchmal auch so das ihr etwas total falsch lest, und erst beim 2. mal schnallt was da wirklich steht

Hab grad so in etwa gelesen

kill -9 geht ab, .....und zu nicht (im sinne von ab gehen aber nicht zu gehen)
:ugly: :ugly:

winter
28.05.04, 09:32
mldonkey hat doch nen eigenen befehl um den core zu killen.
entweder in der gui anklicken, oder per telnet einlogen und von da killen.

BiugEE
28.05.04, 12:31
mldonkey hat doch nen eigenen befehl um den core zu killen.
entweder in der gui anklicken, oder per telnet einlogen und von da killen.
mldonkey ist da schon tot und man kommt nicht mehr in die gui oder geschweige den telnet. auch ist mir das schon mit perl scripten passiert die auf suse 9.0 einwandfrei liefen.
und kill -9 sollet wohl alles töten was auf der pid läuft und das sofort. das macht es aber nicht immer.
heute z.b. hat das beim killen von mldonkey 15 minuten gedauert das er gekillt wurde.

BiugEE
28.05.04, 12:32
Hi
Hab grad so in etwa gelesen
kill -9 geht ab, .....und zu nicht (im sinne von ab gehen aber nicht zu gehen)
:ugly: :ugly:
du bist bestimmt auch so einer der bei ebay leere papschachteln kauft und das kleingedruckte nicht liesst :ugly:

Jorge
28.05.04, 13:02
mldonkey ist da schon tot und man kommt nicht mehr in die gui oder geschweige den telnet. auch ist mir das schon mit perl scripten passiert die auf suse 9.0 einwandfrei liefen.
und kill -9 sollet wohl alles töten was auf der pid läuft und das sofort. das macht es aber nicht immer.
heute z.b. hat das beim killen von mldonkey 15 minuten gedauert das er gekillt wurde.

Zombie-Prozesse
Dieser Text stammt aus einem Usenetartikel von Jürgen Ilse.


--------------------------------------------------------------------------------
Hallo,

Gerd Stief wrote:
> Ich habe ein merkwürdiges Problem mit einem Server unter SuSE 7.1 (Kernel
> 2.2.18). Ich hoffe, Ihr könnt mir helfen.
> Wollte Rechner runterfahren. Habe also "shutdown -h now" eingegeben. Es
> erschien die shutdown-Message aber es geschah nichts weiter. Console hängt,
> kein prompt vorhanden.
> Mit ALT+F2 habe ich auf 2. Console gewechselt. Konnte mich dort dann mit
> root anmelden. Als bash mit exit beendet wurde erschiehn kein erneutes
> login. Stattdessen habe ich in der Processtabelle [login defunct] stehen.
Hört sich an, als sei init gestorben.


> Es werden im Laufe der Zeit immer mehr dieser Zombie-Prozesse eingetragen.
> Sobald ein Programm beendet wurde, bleibt es als Zombie vorhanden.
Wenn init stirbt, wartet niemand mehr auf die gestorbenen Prozesse, ihre Leichen werden aus der Prozess-Tabelle nicht entsorgt und geistern als Zombies weiter im System herum. Folgenden Text habe ich vor einiger Zeit schon mal auf eine Frage zu Zombies verfasst, vielleicht erklärt er dir, warum ein verstorbener "init" solche Auswirkungen hätte ...


< Name des Fragestellers von mir entfernt>wrote:
> Kann mir bitte mal jemand kurz und schmerzfrei erklären, was es
> bedeutet, wenn ein Prozess nicht ausgeführt wird und bei einem ps -ef
> lediglich als
> [Programmname ] angezeigt wird?
Es handelt sich um einen sogenannten Zombie. Die Dokumentation der meisten unix-ähnlichen Systeme bietet dazu als Erklärung an:

"dead, but parent is not waiting"
Um das schlüssig zu erklären, muss man wohl etwas weiter ausholen. Bei der Prozess-Verwaltung gibt es für jeden Prozess einen Eintrag in der Prozesstabelle, in dem bestimmte Daten zur Prozessverwaltung abgelegt werden. Wird der Prozess beendet, werden diese Daten wieder frei gegeben. Allerdings würde mit dem freigeben des Eintrags in der Prozesstabelle auch Informationen wie der "Exit-Status" des Prozesses unwiderbringlich verlorengehen, und möglicherweise möchte der parent- Prozess genau diese Information ja noch weiter benutzen ...

Um dieses Problem zu lösen, hat man sich folgendes ausgedacht: Der Eintrag in der Prozesstabelle wird eben *nicht* sofort nach Beendigung des Prozesses freigegeben, sondern erst, wenn der parent sich diese Informationen abgeholt hat. Dies tut er duch Aufruf der Systemfunktion wait(). Solange also der parent (Elternprozess) nicht wait() aufgerufen hat, um den Exit-Code des Kindprozesses abzuholen, gibt das System den Eintrag in der Prozesstabelle noch nicht frei. Prozesse in diesem Zustand (sie laufen nicht mehr, sind aber noch in der Prozesstabelle verzeichnet) nennt man Zombies, und diese Prozesse werden in der Ausgabe von "ps" als "" markiert.

Eine immer wieder gern gestellte Frage ist "Wie kille ich einen Zombie?". Die Antwort darauf kann nach der obigen Erklärung eigentlich nur lauten "gar nicht, weil er schon tot ist". Die Frage zielt aber meistens auf etwas anderes hin: Wie beseitigt man den Eintrag in der Prozesstabelle? Dieses Problem würde sich von selbst erledigen, wenn der Elternprozess einmal wait() aufrufen würde, um den Exit-Status des Zombies abzuholen (und eigentlich ist nur der Elternprozess dazu in der Lage). Wenn der Elternprozess aber diese Systemfunktion nicht aufruft (Stichwort: "Rabeneltern, die sich nicht mehr um die Kinder kümmern"), wird man diesen Prozess erst einmal nicht los ... ... bis sich der Elternprozess beendet.

Damit "erbt" nun nämlich der Prozess "init" (der Prozess, der beim Systemstart als erstes gestartet wird, mit der Prozess-ID 1) diesen Prozess, und der hat kaum etwas anderes zu tun, als auf seine Kinder zu warten, "init" wird dann also diesen Prozess abräumen. Damit hat man nun bereits eine Methode gefunden, um Zombies los zu werden: Man killt ihre Eltern.

Ich hoffe, das klärt deine Frage zu Zombies ausführlich (und hoffent- lich verständlich) genug. Falls du noch Fragen oder Anmerkungen hast, kannst du dich gern nochmal an mich wenden. Falls irgendjemand anders noch Verbesserungsvorschläge (oder Korrektüren) zu dieser Erklärung hat, bitte ich auch um Rückmeldung. Ansonsten werde ich diesen Text an die Maintainer der FAQ weiterleiten (zwecks Aufnahme in die FAQ, damit solche Fragen vielleicht schon durch die FAQ beantwortet werden können).
>www.suse.de schweigt sich dazu entweder aus oder ich bin zu blöd zum
>Suchen... :-/
Zu diesem Thema findet man tatsächlich nicht allzu ausführliche Erklärungen im Netz. Wenn einem dann noch der passende Suchbegriff (in diesem Fall "Zombie") fehlt, sieht es bei der Suche eher sehr düster aus ...


> Details:
> Ich habe z.Zt. eine abgespeckte SuSe 7.1-Distribution als MP3-Projekt
> unter Perl laufen, und versuche, mir einen MP3-Server aufzubaün
> (Stichwort: Cajun 4.0).
Das Stichwort sagt mir nichts.


> Aus dem Perlscript heraus soll mpg123 aufgerufen werden, der Prozess
> wird auch gestartet, erscheint aber nach dem "Play"-Aufruf eben nur als
> [mpg123 ] in der Prozessliste.
Der Parent-Prozess (vermutlich dein Perl-Programm) wartet nicht auf sein Child, es kommt genau zu der oben beschriebenen Situation.


> Diese Prozess-ID lässt sich auch als root-User nicht mit kill -9
> stoppen...
Wenn du das Perl-Programm killen würdest, wäre der Zombie vermutlich weg ... ;-)


> Wenn ich mpg123 mit dem Titelnamen als Parameter direkt aus der Shell
> aufrufe, klappt es einwandfrei, nur eben unter dem Perlskript Cajun 4.0
> nicht...
Die shell pflegt sich auch um ihre Kinder zu kümmern (ruft wait() auf, wenn die Kinder verstorben sind). Damit verbleiben die beendeten Prozesse nur sehr kurze Zeit als "Zombies" im System, dann werden sie vom System weggeräumt.


> Any ideas ?
Ich hoffe, dir die passenden Erklärungen gegeben zu haben.
--------------------------------

Tschüss,
Jürgen Ilse
(ilse@usenet-verwaltung.org)

Freekazonid
28.05.04, 13:15
nur ein neustart geht dann noch. sogar ein reboot ist nicht mehr möglich.

:confused: was denn nun?

wenn du mldonkey beenden willst, mach ich das immer uber die gui quit und dann in der mldonkey console wo ich das gestartet habe strg+c

BiugEE
28.05.04, 15:14
:confused: was denn nun?

wenn du mldonkey beenden willst, mach ich das immer uber die gui quit und dann in der mldonkey console wo ich das gestartet habe strg+c
Upss meinte natürlich nur ein Reset geht dann noch. Ist heute einfach zu viel los hier auf Arbeit :(

BiugEE
29.05.04, 14:41
ich habe die lösung im mldonkey forum gefunden.
hier der orginal link:
http://mldonkey.org/portal/modules.php?op=modload&name=phpBB2&file=viewtopic&t=4269&highlight=

Pthreads/Linuxthreads
SUSE LINUX 9.1 / SLES 9 beinhaltet eine neue pthread-Implementation, genannt NPTL, welche schneller und besser als die alte Implementation, genannt linuxthreads, ist.

Sollte Ihr altes Programm inkompatibel zur neuen Threading-Implementation sein, stellen wir außerdem die alte zur Verfügung. Wollen Sie auf die alte Version umschalten, dann setzen Sie die Umgebungsvariable LD_ASSUME_KERNEL auf 2.4.21 z.B. mit export LD_ASSUME_KERNEL=2.4.21 in Bash.

und jetzt läuft mein mldonkey wieder ohne probleme. auch andere programme wo ich probleme hatte laufen wieder.

Freekazonid
29.05.04, 19:36
lol suse halt ;)

*scnr*