it-swarm.com.de

Beenden eines nicht mehr funktionierenden Prozesses auf einem UNIX-System

Ich habe einen nicht mehr funktionierenden Prozess auf meinem System:

abc      22093 19508  0 23:29 pts/4    00:00:00 grep ProcA
abc      31756     1  0 Dec08 ?        00:00:00 [ProcA_my_collect] <defunct>

Wie kann ich den obigen Vorgang abbrechen, ohne den Computer neu zu starten? Ich habe es mit versucht

kill -9 31756
Sudo kill -9 31756
49
gagneet

Sie haben den Prozess beendet, aber ein toter Prozess verschwindet erst aus der Prozesstabelle, wenn sein übergeordneter Prozess eine Aufgabe namens "ernten" ausführt (im Wesentlichen wait(3) aufrufen, damit dieser Prozess seinen Beendigungsstatus liest). Tote Prozesse, die nicht geerntet wurden, werden " Zombie-Prozesse " genannt.

Die übergeordnete Prozess-ID, die Sie für 31756 sehen, ist die Prozess-ID 1, die immer zu init gehört. Dieser Prozess sollte seine Zombie-Prozesse in regelmäßigen Abständen ernten, aber wenn dies nicht möglich ist, bleiben sie Zombies in der Prozesstabelle, bis Sie neu starten.

41
Bill Karwin

Haben Sie nach einem untergeordneten Prozess gesucht, der möglicherweise zuerst beendet werden muss? Manchmal ist der Stau auf der ganzen Linie ... Versuchen Sie es mit ps -ef --forest

um zu sehen, was darunter sein kann (wenn überhaupt), töte zuerst das, dann das, von dem du bereits weißt

23
curtisk

Wenn kill -9 einen Prozess nicht abbricht, ist die Ursache fast immer ein Treiber- oder Betriebssystemfehler.

Der init-Prozess hat den Prozess übernommen, kann ihn jedoch nicht ernten. Das heißt: Wenn init-Aufrufe wait (2) ausführen, wird dieser Prozess nicht zurückgegeben. Einer der Hauptzwecke von init ist es, tote, verwaiste Kinder zu ernten. Das Problem ist also nicht, dass seine Eltern vor der Ernte gestorben sind. Denken Sie: Ansonsten, wer erhält die Ergebnisse eines Nohup-Prozesses nach dem Abmelden?

Es ist unwahrscheinlich, dass das Töten von Kindern, die nicht mehr existieren, hilft, es sei denn, sie hängen irgendwie mit dem bestimmten Fehler zusammen, den Sie sehen.

6
janm

Der Prozess hängt wahrscheinlich z.B. ignoriere Signale wie SIGPIPE, überprüfe mit strace -p <pid> was passiert hier.

0
tolazy

Sie werden wahrscheinlich nicht dazu in der Lage sein, wenn das Töten des Elternteils es nicht auflöst. Aus irgendeinem Grund sammeln die Systeme diesen Zombie-Prozess nicht.

FWIW, ich habe es ziemlich oft auf den SCO Openserver-Boxen gesehen, die ich früher verwaltet habe. Starke Mehrbenutzernutzung und geringe Systemressourcen, aber es schien nichts zu schaden. Ärgerte mich nur :)

0
Brian Knoblauch