Antworten:
Oh Gott! Nein nein Nein. Verwende nicht kill -9.
Es gibt dem Prozess keine Chance, sauber zu werden:
Steckdosenverbindungen abschalten
bereinigen Sie temporäre Dateien
informieren Sie seine Kinder, dass es weggeht
Setzen Sie die Anschlusseigenschaften zurück und so weiter und so fort.
Senden Sie im Allgemeinen 15 und warten Sie ein oder zwei Sekunden. Wenn dies nicht funktioniert, senden Sie 2 und wenn dies nicht funktioniert, senden Sie 1. Wenn dies nicht funktioniert, ENTFERNEN SIE DEN BINARY, da sich das Programm schlecht verhält!
Verwende nicht kill -9. Nehmen Sie den Mähdrescher nicht heraus, nur um den Blumentopf aufzuräumen.
Zombie-Prozess (eigentlich heißen sie jetzt <defunct>
) ist eigentlich kein Prozess. Es ist nur ein Eintrag in der Prozesstabelle, sodass der übergeordnete Prozess wait()
Syscall ausführen kann .
Sie sollten sich keine Sorgen um sie machen. Sie belegen keine Ressourcen, sie verschwinden auch, wenn der Elternteil anruft, wait()
wenn der Elternteil selbst stirbt.
Es ist ein Prozess, der vollständig freigegeben wurde, aber noch in der Prozesstabelle vorhanden ist. Vergleichen Sie dies mit einem verwaisten Prozess, dessen Elternteil gestorben ist, aber noch ausgeführt wird.
Hier sind einige Ratschläge , wie Sie sie loswerden können.
Es gibt jedoch bereits eine akzeptierte Antwort: Sie KÖNNEN den Zombie-Prozess beenden. Verbinden Sie sich mit dem Debugger mit dem übergeordneten Prozess und rufen Sie die Funktion waitpid auf. ZB: - Nehmen wir an, dass der Elternteil PID = 100 hat, der Zombie-Prozess PID = 200
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
Einem Zombie-Prozess sind keine anderen Ressourcen als der Eintrag im Prozessbaum zugeordnet. Dies geschieht, wenn ein Prozess abgeschlossen ist, der übergeordnete Prozess ihn jedoch noch nicht geerntet (dh wait
bearbeitet) hat.
Sie können versuchen, das übergeordnete Element dazu zu zwingen, indem Sie ein SIGCHLD ( kill -20
) an das übergeordnete Element senden. Es gibt jedoch keine Garantie dafür, dass das übergeordnete Element dies einhält.
Sie werden sie häufig für kurze Zeiträume sehen (z. B. beim Anzeigen des Prozessbaums mit top) - dies ist normal. In der Zeitspanne zwischen dem Abschluss eines untergeordneten Prozesses und dem Abstimmen des übergeordneten Prozesses wird der untergeordnete Prozess als Zombie angezeigt.
Wenn Sie jedoch Zombie-Prozesse sehen, die ständig existieren - was nicht normal ist -, müssen Sie sich immer noch keine Sorgen machen - auch wenn einem toten Prozess keine Ressourcen zugewiesen wurden -, bedeutet dies im Allgemeinen, dass die Anwendung von beschissenen Entwicklern schlecht geschrieben wurde.
Das einzige Mal, dass Sie von Zombie-Prozessen betroffen sein sollten, ist, wenn Sie viele, viele von ihnen sehen, zum Beispiel, wenn die gleiche beschissene Anwendung, die oben erwähnt wurde, unter Last gesetzt wird.
Wir haben eine Menge beschissener Entwickler, bei denen 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 häufig auf die beschissenen Shell-Skripte zurück, die von beschissenen Entwicklern in Interviews geschrieben wurden -, wenn der Kandidat herausfinden kann, dass das Skript tatsächlich beschissen ist, und uns sagt, warum es beschissen ist, hat er einen guten Fuß in der Tür.
Wie für die virtuelle Schrotflinte ...
$ shoot <pid>
#! / bin / sh victim = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' ` Opfer \ _name = `ps -e -o pid, cmd | egrep "^ \ s * $ {victim} \ b" | head -n 1 | awk '{print $ 2}' ` #kill $ {victim} echo "$ {victim_name} getötet."
Und denken Sie daran: Schießen Sie immer in den Kopf.
Ein Zombie-Prozess ist ein Prozess, dessen Ausführung abgeschlossen ist, der jedoch weiterhin in der Prozesstabelle aufgeführt ist.
kill -9 [übergeordneter Prozessname] legt es mit extremen Vorurteilen ab.