Zombie-Prozesse

Einen Eintrag von lesen lebhaft Ich erinnerte mich, dass in einem Forum jemand um Hilfe bat, da sein System langsam war und sich einige der Lösungen auf Prozesse konzentrierten.

Die Hauptzustände der Prozesse unter Linux sind:
Schlafen (S) : Prozesse, die darauf warten, ausgeführt zu werden.
Laufen (R) : Prozesse, die ausgeführt werden.
Warten (D) : Prozesse, die darauf warten, dass ein Ein- / Ausstiegsvorgang abgeschlossen ist.
Zombie (Z) : Prozesse, die beendet wurden, aber weiterhin in der Prozesstabelle angezeigt werden. Sie können durch Programmierfehler verursacht werden und ein Symptom für ein langsames oder problemverursachendes System sein.

Ein Zombie-Prozess ist ein Prozess, der niemals ein Signal von dem übergeordneten Prozess empfangen hat, der ihn erstellt hat. Ein untergeordneter Prozess hat seinen Ursprung in einem übergeordneten Prozess, der als übergeordneter Prozess bezeichnet wird und für das Senden der Signale an die generierten untergeordneten Prozesse verantwortlich ist damit anzuzeigen, dass ihre Lebensdauer beendet ist.

Sie können durch Programmierfehler verursacht werden und ein Symptom für ein langsames oder problemverursachendes System sein. Diese Situation tritt normalerweise auf, auch weil einige Konfigurationen vom Entwickler nicht in Betracht gezogen wurden.

In Wikipedia können Sie Lesen Sie mehr über diese Prozesse.

Wenn Sie den Befehl top ausführen, können Sie in Echtzeit die Prozesse sehen, die im System ausgeführt werden, und es wird angezeigt, ob sich irgendwelche in einem Zombie-Status befinden, aber es wird nicht angezeigt, um welchen es sich handelt.

Prozess

Geben Sie das Terminal ein, um alle Prozesse anzuzeigen: PS Auxund nur die Zombies zu sehen: ps -el | grep 'Z'o ps-A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'

alf @ Alf ~ $ ps-A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'

Z 1945

Wenn bei der Auflistung der Prozesse einer mit einem Z-Status angezeigt wird, bedeutet dies, dass es sich um einen Zombie handelt, was wiederum bedeutet, dass die Anwendung nicht gut gelöst ist oder Fehler aufweist, da die PID durch Ausführen eines ähnlichen Befehls im Terminal beseitigt werden kann zu, in diesem Beispiel: 

alf @ Alf ~ $ töte -9 1945

Wenn Sie viele oder mindestens mehrere Zombie-Prozesse haben, können Sie den folgenden Befehl verwenden, mit dem diese beendet werden. Dies funktioniert nur, wenn Sie ihn ohne Zombie-Prozesse ausführen, geschieht nichts:

alf @ Alf ~ $ sudo kill -HUP `ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]' | awk '{print $ 2}' ''

Grüße


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   ordnungsgemäße sagte

    🙁

  2.   Oscar sagte

    Vielen Dank, sehr guter Beitrag, ich werde die Befehle speichern, um regelmäßige Überprüfungen durchzuführen.

  3.   Josh sagte

    Danke, schöner Artikel.

  4.   MSX sagte

    Einige Erläuterungen zu Ihrem Artikel:

    Der Begriff "Zombie-Prozess" ist technisch unangemessen und diejenigen von uns, die ein wenig Erfahrung mit GNU / Linux haben, sollten ihn vermeiden, da kein Prozess an sich ausgeführt wird, sondern nur ein Verweis auf einen Prozess, der im System und nicht mehr vorhanden ist er gab seine Kennung nicht frei.

    Ein "Zombie-Prozess" ist eigentlich der Eintrag in der Zuordnungstabelle der Prozesskennung (Prozessdeskriptor), nur das, sodass keine Ressourcen verbraucht werden, die über einige Bytes Speicher hinausgehen, die das System verwendet, um die Prozesstabelle zu verfolgen.

    Das einzige Problem, das bei Ghost- (oder Zombie-) Registrierungsdeskriptoren auftreten kann, besteht darin, dass diese zu schnell erscheinen und theoretisch die gesamte Zuordnungstabelle für Prozessdeskriptoren belegen könnten, sodass das System möglicherweise keinen Platz für neue Datensätze hat Es ist unmöglich, neue Programme auszuführen, die ihre Prozesse aufzeichnen, und die Maschine schließlich aufzuhängen.

    Dies ist jedoch fast unmöglich, da in 32-Bit-Systemen 32767 Speicherplätze zum Registrieren von Prozessen vorhanden sind (selten oder nie verwendet) und doppelt so viel wie in einem 64-Bit-System.

    Die einzige Möglichkeit, ein System zum Absturz zu bringen, wenn tote Prozesse schlecht entfernt wurden, besteht darin, die Prozesse zu erstellen und sie schnell zu beenden, ohne den Prozessdeskriptor korrekt zu bereinigen (dh "Zombie-Prozesse" zu erstellen), aber seien wir ehrlich, wenn jemand einen hängen möchte System gibt es viel direktere Wege als das. schnell und exponentiell neue Prozesse zu erstellen, die das System blockieren und aufhängen; eine der Möglichkeiten, dies mit einer Gabelbombe zu erreichen:

    : () {: |: &};

    Sie können das System relativ widerstandsfähig gegen eine Gabelbombe machen, indem Sie /etc/security/limits.conf richtig konfigurieren. Es muss jedoch berücksichtigt werden, dass je weniger wir die Möglichkeit der Erstellung neuer Prozesse einschränken, desto weniger Anwendungen ausgeführt werden können gleichzeitig auf unserem System. Es ist jedoch ein gültiges Tool für alle paranoiden Systemadministratoren, die eine sehr genaue Kontrolle über ihre Systeme haben möchten!

    Dieser Artikel enthält gute Informationen zu ungültigen Prozessbeschreibungen:
    http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
    Und darin gibt es eine klare Erklärung, wie eine Gabelbombe funktioniert: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work

    Salu2

    1.    Jotaele sagte

      msx: «Der Begriff„ Zombie-Prozess “ist technisch unangemessen und diejenigen von uns, die ein wenig Erfahrung mit GNU / Linux haben, sollten es vermeiden, ihn zu verwenden…» Ha ha ha. Es gibt nur etwas Größeres als Ihren Stolz: Ihren schlechten Geschmack. Hey, was du getan hast, ist geschmacklos, wenn du einen Vortrag halten, einen an der Fakultät bekommen oder einen eigenen Blog erstellen und schreiben willst, was du willst, aber hierher zu kommen, um die Wohnung auf guten Alf zu korrigieren, ist wirklich geschmacklos .

      1.    Ferdinand Rojas sagte

        Die Wahrheit schien mir ein ziemlich interessanter Kommentar zu sein. Viel mehr als die Post

  5.   platonow sagte

    danke sehr interessant.

  6.   rots87 sagte

    ausgezeichneter Artikel danke

  7.   Alf sagte

    MSX
    «Der Begriff" Zombie-Prozess "ist technisch unangemessen und diejenigen von uns, die ein wenig Erfahrung mit GNU / Linux haben, sollten es vermeiden, ihn zu verwenden»

    Wir müssen die Entwickler benachrichtigen, da, wie Sie sehen werden, auch der Begriff Zombie verwendet wird, den ich dort auf der Konsole gelesen habe.

    Grüße

  8.   Stadt sagte

    Herzlichen Glückwunsch, sehr guter Artikel, ich hatte immer Zweifel, dass es sich um die PZs handelte, aber ich hatte nie Zeit, Nachforschungen anzustellen. Jetzt betrete ich die Seite und stoße auf die Antwort. Danke.

  9.   truko22 sagte

    In KDE mit Kontrolle + Fluchtsystem gehen die Aktivitäten aus und wir können diese Zombies schnell töten.

  10.   Regen sagte

    Eine Korrektur, es ist ein ZOMBIE, kein ZOMBIE-Prozess
    Zombie ist in Englisch
    Zombi auf Spanisch

  11.   Elin sagte

    Luxus, danke!

  12.   Roberto sagte

    Erstens scheint der Begriff Zombie-Prozess völlig korrekt zu sein. Auch der Begriff ist am wenigsten wichtig.
    Der Punkt ist, dass, wie msx anzeigt, und der gleichen Wikipedia (ich habe den Artikel gelesen) der Zombie-Prozess wirklich tot ist.
    «Wenn ein Prozess endet, werden der gesamte Speicher und die zugehörigen Ressourcen dereferenziert, sodass sie von anderen Prozessen verwendet werden können. Der Prozesseintrag in der Prozesstabelle bleibt jedoch weiterhin »
    Das heißt, der Prozess beansprucht keine Systemressourcen mehr, daher ist die Belastung des Systems minimal, wie durch msx erläutert.
    Das einzige, was es hat, ist ein ungültiger Eintrag in der Prozesstabelle ... was, wenn es Tausende von ihnen gibt, möglicherweise eine Last wäre (schließlich muss der Prozessor die Prozesstabelle lesen und er würde a lesen viele nutzlose Informationen) zusätzlich zu schlechten Programmierpraktiken (jemand macht schlecht gemachte Anwendungen).
    Aber an sich ist die Erklärung des Beitrags nicht so richtig und die richtige wäre die von msx gegebene.