Frage Was ist ein Zombie-Prozess und wie töte ich ihn?


Virtuelle Schrotflinten?


36
2018-05-27 05:54


Ursprung




Antworten:


Oh Gott! Nein nein Nein. Benutze nicht kill -9.

Es gibt dem Prozess keine Chance sauber zu machen:

  1. Steckverbindungen herunterfahren

  2. bereinigen temporäre Dateien

  3. informieren Sie seine Kinder, dass es weggeht

  4. Reset seine Terminal-Eigenschaften und so weiter und so weiter und so weiter.

Im Allgemeinen senden Sie 15, und warten Sie eine Sekunde oder zwei, und wenn das nicht funktioniert, senden Sie 2, und wenn das nicht funktioniert, senden Sie 1. Wenn dies nicht geschieht, ENTFERNEN SIE DIE BINARY, weil das Programm schlecht verhält!

Benutze nicht kill -9. Bringen Sie den Mähdrescher nicht heraus, nur um den Blumentopf aufzuräumen.


18
2018-05-27 06:34



kill -9 tötet keine Zombies. Sie müssen ihre Eltern töten, schauen Sie sich PStree an. - LapTop006
@ LapTop006: In diesem Fall sind sie eher wie Vampire; töte den Vampirkopf, um die Invasion zu stoppen. - amphetamachine
Diese Antwort ist in fast jeder Hinsicht falsch. Der Prozess ist abgeschlossen. es hat bereits seine Verbindungen beendet, temporäre Dateien bereinigt usw. usw. Es gibt keinen eigentlichen Prozess mehr, nur einen Eintrag in der Prozesstabelle. Entfernen Sie die Child-Binärdatei nicht - sie verhält sich nicht schlecht. Es bedeutet nur, dass die Eltern noch keine richtige Beerdigung für ihr Kind gehalten haben. - Ken Williams


Zombie-Prozess (Eigentlich werden sie jetzt genannt <defunct>) ist nicht wirklich ein Prozess. Es ist nur ein Eintrag in der Prozesstabelle, also kann der Elternprozess dies tun wait() syscall.

Sie sollten sich keine Sorgen um sie machen. Sie belegen keine Ressourcen, sie verschwinden entweder, wenn ihre Eltern anrufen wait() wenn der Elternteil selbst stirbt.


18
2018-05-27 08:46





Es ist ein Prozess, der vollständig freigegeben wurde, aber immer noch in der Prozesstabelle vorhanden ist. Vergleichen Sie dies mit einem Waisenprozess, deren Eltern gestorben sind, aber immer noch ausgeführt werden.

Hier ist  etwas  Rat um sie loszuwerden.


9
2018-05-27 06:00





Einem Zombie-Prozess sind außer dem Eintrag im Prozessbaum keine Ressourcen zugewiesen. Dies geschieht, wenn ein Prozess abgeschlossen ist, der Elternprozess jedoch noch nicht abgeschlossen ist geerntet Ich knote., waited darauf).

Sie können versuchen, die Eltern zu zwingen, dies zu tun, wenn Sie möchten, indem Sie ihr ein SIGCHLD (kill -20), zu den Eltern, aber es gibt keine Garantie, dass die Eltern es ehren werden.

Sie sehen sie oft für kurze Zeit (z. B. während Sie den Prozessbaum mit top anzeigen) - das ist normal; In der Zeitscheibe zwischen dem Zeitpunkt, zu dem ein Kindprozess abgeschlossen ist, und dem Elternwert, der dafür abgefragt wird, erscheint der Kindprozess als Zombie.

Wenn Sie Zombie-Prozesse sehen, die jedoch kontinuierlich existieren - was nicht normal ist -, müssen Sie sich nicht darum kümmern - da einem toten Prozess keine Ressourcen zugewiesen sind - bedeutet dies im Allgemeinen, dass die Anwendung schlecht von schlechten Entwicklern geschrieben wird.

Die einzige Zeit, die Sie von Zombie-Prozessen betroffen sein sollten, ist, wenn Sie viele und viele von ihnen sehen, zum Beispiel, wenn die gleiche beschissene Anwendung, die oben erwähnt wurde, unter Last gestellt wird.

Wir haben viele beschissene Entwickler dort, wo ich arbeite, und so habe ich das Privileg, mit solchen Problemen umzugehen und dabei alle möglichen nutzlosen Dinge zu lernen. In der Tat - mein Team greift oft auf die miesen Shell-Skripte zurück, die von verrückten Entwicklern in Interviews geschrieben wurden - wenn der Kandidat herausfindet, dass das Skript in der Tat crapy ist und uns sagt, warum es beschissen ist, hat er einen guten Fuß in der Tür.


8
2018-05-28 15:58





Es gibt jedoch bereits eine akzeptierte Antwort: Sie können den Zombie-Prozess töten. Verknüpfen Sie den Debugger mit dem übergeordneten Prozess und rufen Sie die Funktion "waitpid" auf. Z.B.: - Nehmen wir an, dass der Elternteil PID = 100 hat, der Zombie-Prozess PID = 200 hat

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit

8
2018-01-11 13:28



Interessant. Ich werde es versuchen. - ewwhite


Was die virtuelle Schrotflinte angeht ...

$ schießen <pid>
#! / bin / sh
opfer = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' `
Opfer \ _name = `ps -e -o pid, cmd | egrep "^ \ s * $ {opfer} \ b" | Kopf -n 1 | awk '{print $ 2}' `
#kill $ {Opfer}
echo "Killed $ {victor_name}"

Und denken Sie daran: Schießen Sie sie immer in den Kopf.


0
2018-06-01 12:33



Es tut mir leid, aber für das Protokoll, dieses Skript hat einen Tippfehler "opfer_name" und wird das Elternteil der PID auf $ 1 getötet, auf jeden Fall denkt, wenn PID der einzige Zombie ist oder wenn er einige Geschwister hat, ist es einfach tötet den Vater und damit die ganze Familie wird zugrunde gehen. - Marc Riera


Ein Zombie-Prozess ist ein Prozess, der die Ausführung beendet hat, aber immer noch in der Prozesstabelle aufgeführt ist.

kill -9 [Elternprozessname] wird es niederschreiben, mit extremen Vorurteilen.


-1
2018-05-27 05:58



kill -9 wird keinen Zombie-Prozess töten - das ist einer der Gründe, warum sie Zombies genannt werden. Ein Zombie- "Prozess" wird nicht verschwinden, bis sein Rückkehrcode von einem Elternprozess geerntet wird. - Mei
Nein, töte -9 weiter DAS ELTERNTEIL wird das Elternteil töten, indem es init es Elternteil macht, welches WERDEN Erhalte den Rückgabecode des Kindes. - Alan