zombie-Prozess nicht getötet werden können
Gibt es einen Weg, um zu töten ein zombie-Prozess? Ich habe versucht, Sie anzurufen exit
zu töten, den Prozess und auch das senden SIGINT
signal an den Prozess, aber es scheint, dass nichts kann Sie töten. Ich bin in der Programmierung für Linux.
- Oh, ich hatte vergessen, die offensichtliche Witz: der Weg zum kill a zombie ist ein Schießen in den Kopf.
- Wenn Sie die töten, PID scheitern?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zombie-Prozesse sind bereits tot, Sie können also nicht getötet werden, Sie können nur geerntet werden, was getan werden muss, die von Ihrer übergeordneten Prozess über
wait*()
. Dies ist in der Regel als diechild reaper
idiom, in die signal-handler fürSIGCHLD
:zombie
,dead
,killed
undchild reaper
in dieser Antwort 🙂SIGCHLD
handler, riskieren Sie die Sperrung und nie wieder.wait()
Varianten, die UnterstützungWNOHANG
signal(SIGCHLD, SIG_IGN)
. Der Kind-Prozess geht Weg (Blätter, kein zombie), sobald es beendet ist, da die Eltern registriert hat, ein mangelndes Interesse am Wohlergehen Ihrer Kinder.Hier ist ein Skript, das ich erstellt um zu töten ALLE zombie-Prozesse. Es nutzt den GDB-debugger anfügen, um den übergeordneten Prozess und senden eine waitpid zu töten, die zombie-Prozess. Dieses verlassen der Eltern Leben und nur töten die zombie.
GDB-debugger installiert werden, und Sie müssen eingeloggt sein, um Rechte an einen Prozess anfügen. Dies wurde getestet auf Centos 6.3.
Genießen.
warning: /tmp/zombie_slayer.txt: No such file or directory
.Einen zombie-Prozess ist eine Prozess-id (und die damit verbundenen Beendigung, status und Informationen zur Ressourcennutzung) wurde noch nicht gewartet, der durch den übergeordneten Prozess. Die einzigen Möglichkeiten, Sie zu beseitigen sind, um seine Eltern zu warten, bis es (manchmal kann dies erreicht werden durch senden
SIGCHLD
zu den übergeordneten manuell, wenn das Elternteil war einfach nur buggy und hatte eine race condition, wo er verpasste die chance zu warten), aber in der Regel hast du Pech, es sei denn, Sie gewaltsam beendet den Eltern.Edit: eine Weitere Möglichkeit, wenn Sie verzweifelt sind und nicht wollen, um zu töten, die Eltern, ist zu befestigen, um die Eltern mit gdb und gewaltsam nennen
waitpid
auf den zombie-Kind.wenn ich mich Recht erinnere, tötet die Eltern eines zombie-Prozess zu ermöglichen, wird der zombie-Prozess, um zu sterben.
verwenden
ps faux
man eine schöne hierarchische Struktur Ihrer Laufenden Prozesse zeigt Eltern/Kind-Beziehungen.init
.kill -17 ZOMBIE_PID
ODER
kill -SIGCHLD ZOMBIE_PID
würde möglicherweise funktionieren, bu tlike jeder andere sagte, es ist die Wartezeit für die Eltern zu nennen
wait()
also, wenn der Elternteil stirbt, ohne zu ernten, und es stecken blieb dort für einige Grund, warum Sie nicht wollen könnte, um es zu töten.Sehen unix-faqs "Wie kann ich loswerden der zombie-Prozesse, die durchhalten?"
Können Sie zombies töten, als Sie bereits tot sind. Aber wenn man zu viele zombies töten übergeordneten Prozess oder Dienst neu starten.
Können Sie versuchen, zu töten, zombie-Prozess mit seiner pid
Bitte beachten Sie, dass kill -9 garantiert nicht zu töten einen zombie-Prozess
kill -9
kann nie töte einen zombie-Prozess.