GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was sind Zombie-Prozesse und wie findet und tötet man Zombie-Prozesse?

Wenn Sie ein normaler Linux-Benutzer sind, müssen Sie auf den Begriff „Zombie-Prozesse gestoßen sein ’. Was sind also die Zombie-Prozesse? Wie entstehen sie? Sind sie schädlich für das System? Wie beende ich diese Prozesse? Lesen Sie weiter, um Antworten auf all diese Fragen zu erhalten.

Was sind Zombie-Prozesse?

Wir alle wissen also, wie Prozesse funktionieren. Wir starten ein Programm, starten unsere Aufgabe und sobald unsere Aufgabe beendet ist, beenden wir diesen Prozess. Sobald der Prozess beendet ist, muss er aus der Prozesstabelle entfernt werden.

Die aktuellen Prozesse können Sie im „System-Monitor“ einsehen.

Ersetzen Sie die PID durch die ID des übergeordneten Prozesses, damit der übergeordnete Prozess alle toten und abgeschlossenen untergeordneten Prozesse entfernt. Stellen Sie sich das so vor:„Sie finden eine Leiche mitten auf der Straße, Sie rufen die Familie der Leiche an und sie bringen diese Leiche von der Straße weg.“ Aber viele Programme sind nicht gut genug programmiert, um diese Kinderzombies zu entfernen, denn wenn sie es wären, hätten Sie diese Zombies gar nicht erst. Das Einzige, was Child Zombies garantiert entfernt, ist das Töten des Elternteils.

Aber manchmal bleiben einige dieser Prozesse auch nach Abschluss der Ausführung in der Prozesstabelle.

Aber manchmal bleiben einige dieser Prozesse auch nach Abschluss der Ausführung in der Prozesstabelle.

Diese Prozesse, die ihr Ausführungsleben abgeschlossen haben, aber noch in der Prozesstabelle vorhanden sind, werden als „Zombie-Prozesse“ bezeichnet.

Und wie genau werden sie erstellt?

Wann immer wir ein Programm ausführen, erstellt es einen übergeordneten Prozess und viele untergeordnete Prozesse. Alle diese untergeordneten Prozesse verwenden Ressourcen wie Arbeitsspeicher und CPU, die ihnen vom Kernel zugewiesen wurden.

Sobald diese untergeordneten Prozesse die Ausführung beendet haben, senden sie einen Exit-Aufruf und sterben. Dieser Exit-Aufruf muss vom übergeordneten Prozess gelesen werden, der später den Wartebefehl aufruft, um den exit_status des untergeordneten Prozesses zu lesen, damit der untergeordnete Prozess aus der Prozesstabelle entfernt werden kann. Wenn der Parent den vom Child-Prozess gesendeten Exit-Aufruf korrekt liest, wird der Prozess aus der Prozesstabelle entfernt.

Aber wenn der übergeordnete Prozess den Exit-Aufruf des untergeordneten Prozesses nicht lesen kann, wird der untergeordnete Prozess, der seine Ausführung bereits beendet hat und jetzt tot ist, nicht aus der Prozesstabelle entfernt.

Sind Zombie-Prozesse schädlich für das System?

Nein. Da der Zombie-Prozess keine Arbeit verrichtet, keine Ressourcen verwendet oder andere Prozesse beeinflusst, schadet es nicht, einen Zombie-Prozess zu haben. Aber da der exit_status und andere Prozessinformationen aus der Prozesstabelle im RAM gespeichert werden, kann es manchmal ein Problem sein, zu viele Zombie-Prozesse zu haben. Stellen Sie es sich so vor:

Sie sind Eigentümer einer Baufirma. Sie zahlen allen Ihren Arbeitern Tageslöhne, je nachdem, wie sie arbeiten. Jeden Tag kommt ein Arbeiter auf die Baustelle, sitzt nur da, man muss ihn nicht bezahlen, er macht keine Arbeit. Er kommt einfach jeden Tag und setzt sich, das war’s!“

Ein solcher Arbeiter ist ein lebendiges Beispiel für einen Zombie-Prozess. Aber Wenn Sie viele Zombie-Arbeiter haben, wird Ihre Baustelle überfüllt und es könnte für die Menschen, die tatsächlich arbeiten, schwierig werden.

Und wie findet man Zombie-Prozesse?

Starten Sie ein Terminal und geben Sie den folgenden Befehl ein – ps aux | grep Z Sie erhalten nun Details zu allen Zombie-Prozessen in der Prozesstabelle.

Wie beendet man Zombie-Prozesse?

Normalerweise töten wir Prozesse mit dem SIGKILL-Befehl, aber Zombie-Prozesse sind bereits tot. Du kannst nichts töten, was bereits tot ist. Sie geben also diesen Befehl ein – kill -s SIGCHLD pid Ersetzen Sie die PID durch die ID des übergeordneten Prozesses, damit der übergeordnete Prozess alle toten und abgeschlossenen untergeordneten Prozesse entfernt. Stellen Sie es sich so vor:

Sie finden eine Leiche mitten auf der Straße, Sie rufen die Familie der Leiche an und sie bringen diese Leiche von der Straße weg.“

Aber viele Programme sind nicht gut genug programmiert, um diese Kinderzombies zu entfernen, denn wenn sie es wären, hätten Sie diese Zombies gar nicht erst. Das Einzige, was Child Zombies garantiert entfernt, ist das Töten des Elternteils.


Linux
  1. So beenden Sie einen Zombie-Prozess unter Linux

  2. So finden und töten Sie den Zombie-Prozess in Linux

  3. So finden Sie heraus, wer auf Ihrem System angemeldet ist und was er tut

  4. Wie beendet man einen Prozess, dessen Eltern Init ist?

  5. So beenden Sie den Zombie-Prozess

So finden und töten Sie Zombie-Prozesse in CentOS 8

So finden und beenden Sie einen Prozess mit einem Linux-Terminal

So töten Sie Zombie-Prozesse in Ubuntu 20.04 LTS

So finden Sie die Prozess-ID eines Programms und beenden es [Kurztipp]

So töten Sie Zombie-Prozesse in Ubuntu

So beenden Sie Prozesse in Linux mit kill, killall und pkill