töten Sie -9-Programme, aber sie bleiben hängen

9695
Tim

Ich habe versucht, alle meine früheren Jobs unter KUbuntu durch zu erledigen

kill -9 $(jobs -p) 

Obwohl dieser Befehl sofort die Nachricht gab

[1] Mein Job getötet1

[2] Mein Job getötet2

Ich kann immer noch sehen, dass ihre Prozesse in der Ausgabe von top hängen und die CPU- und Speicherauslastung in der Ausgabe von uptime und kostenlos nicht geändert werden.

Ich denke, ich muss sie nicht richtig getötet haben. Kann mir bitte jemand erklären, was mit mir passiert und was soll ich tun?

Ich fand das oben, wenn Sie k eingeben und die PID eingeben, kann ich die Prozesse nacheinander beenden. SO unterscheidet sich das vom Befehl kill?

Ich habe auch irgendwo online http://www.ruhr.de/home/smallo/award.html gefunden, dass Kill -9 nicht empfohlen wird

Nutzlose Verwendung von Kill -9 Serienbriefen

(Zitat abscheulich)

Nein nein Nein. Verwenden Sie nicht kill -9.

Es gibt dem Prozess keine Chance, sauber zu gehen:

1) Steckdosenverbindungen herunterfahren

2) Bereinigen Sie temporäre Dateien

3) Informieren Sie seine Kinder, dass es weggeht

4) Setzen Sie die Eigenschaften des Terminals zurück

und so weiter und so weiter und so weiter.

Senden Sie im Allgemeinen 15, und warten Sie ein oder zwei Sekunden. Wenn dies nicht funktioniert, senden Sie 2, und falls dies nicht funktioniert, senden Sie 1. Wenn dies nicht der Fall ist, ENTFERNEN SIE DAS BINÄRISCHE BUCHSTABEN, da sich das Programm schlecht benimmt!

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

Ist das wahr? Was bedeutet es "send 15", "send 2" und "send 1"? Sind sie selbst Befehle oder "kill -15 PID", "kill -2 PID" und "kill -1 PID"?

Danke und Grüße!

9
Durch das Entfernen der Binärdatei (ausführbare Datei) wird der Prozess an sich nicht beendet. Das Dateisystem weiß, dass der Prozess diese Datei verwendet, und lässt den Prozess die Datei "sehen", auch nachdem Sie sie entfernt haben. Jeppe Stig Nielsen vor 7 Jahren 0

5 Antworten auf die Frage

7
nkr1pt

Ihr Prozess ist wahrscheinlich tot, aber er wird immer noch im Prozess-Tabelleneintrag angezeigt, da es sich um einen "Zombie-Prozess" handelt. Wenn ein untergeordneter Prozess beendet und vollständig verschwunden ist (mit Ausnahme seines Prozesstabelleneintrags) und der übergeordnete Prozess nicht in der Lage ist, den Beendigungsstatus abzurufen (durch eine der Wait-Funktionen), wird dies als Zombie bezeichnet Arbeit, weil es bereits beendet ist. Was Sie tun müssen, ist, den übergeordneten Prozess herauszufinden und zu töten, wenn er cleany ist, also nicht mit kill-9

Hier sind zwei einfache Schritte, um einen Zombie zu töten ...

  1. Wenn der Elternteil noch lebt, versuchen Sie es zu töten (oder SIGHUP ist alles was Sie brauchen)
  2. Wenn Nummer 1 fehlschlägt, liegt ein Fehler im Kernel vor .... Neustart ist Ihr Freund und behebt diesen Fehler: ->
Ich übermittle meine Jobs in der Kommandozeile und im Hintergrund. Was würden ihre Eltern sein? Und wie finde ich ihre Eltern? Tim vor 15 Jahren 0
Verwenden Sie das `-f`-Flag, um die übergeordneten Prozesse anzuzeigen. Jack M. vor 15 Jahren 0
5
puetzk

siehe man killfür eine Definition der verschiedenen Signale zur Verfügung, aber ja.

  • 15 ist SIGTERM und fordert ein Programm zum Beenden auf.
  • 2 ist SIGINT und entspricht Control-C
  • 1 ist SIGHUP und zeigt an, dass das Terminal aufgelegt hat.

Diese informieren einen Prozess darüber, dass der Benutzer mit dem Prozess "fertig" ist, obwohl sie etwas unterschiedliche Gründe haben. SIGTERM wird möglicherweise als "Beenden der aktuellen Aufgabe, dann Beenden; kein weiterer Start" interpretiert. SIGINT bedeutet, "was Sie aufgeben" tun und beenden ", bedeutet SIGHUP nur, dass niemand mehr zuhört (ein Serverprozess könnte auf SIGHUP legitimerweise reagieren, indem er seine Konsolenausgabe abbricht und weiter läuft).

  • 9 ist SIGKILL und zeichnet sich dadurch aus, dass es der einzige Prozess ist, den der Prozess nicht intern erfassen und verarbeiten kann. Dies führt einfach dazu, dass der Kernel den Prozess nie wieder in den Griff bekommt und keine Möglichkeit zum Reinigen hat.
Wenn Sie k eingeben und die PID eingeben, kann ich die Prozesse nacheinander beenden. Entspricht das also einigen Optionen für den Befehl kill? Tim vor 15 Jahren 0
Ja, top sendet nur ein Signal an den Prozess, genau wie Kill. AFAICT, das von top verwendete Standardsignal ist 15 (SIGTERM). puetzk vor 15 Jahren 0
1
Adriano Varoli Piazza

Es bedeutet, kill -15 PID(oder eine andere Nummer) anstelle von zu verwenden kill -9 PID. Die Zahlen entsprechen unterschiedlichen Unix-Signalen .

1
Satanicpuppy

Es bedeutet "kill -1" oder "kill -15" anstatt "kill -9" einzugeben. Kill -9 ist eine Hardcore-Kugel im Kopf eines jeden laufenden Prozesses. Er tötet ihn in einem schmutzigen Zustand tot, was zu Speicherleckagen führen kann, bla bla.

Wenn Sie kill -9 eingeben und es nicht funktioniert, würde ich sicherstellen, dass der Prozess nicht erneut erscheint und Sie die Erlaubnis haben, diesen Prozess zu beenden.

Wie würden Sie aussehen, um sicherzustellen, dass der Prozess nicht erneut erscheint? Habe ich die Erlaubnis, diesen Prozess zu beenden, da ich Eigentümer der Prozesse bin? Tim vor 15 Jahren 0
Es sollte eine andere Prozessnummer haben, falls dies der Fall ist. Wenn Sie also ps -Al ausführen und ProcessA sehen, töten Sie -9 ProcessA und dann ps -Al und es ist immer noch ein ProcessA in der Prozesswarteschlange. Stellen Sie sicher, dass es sich um das SAME-ProzessA und nicht um ein neues Verfahren handelt. Satanicpuppy vor 15 Jahren 0
Und es wird Ihnen sagen, wenn Sie keine Erlaubnis haben, den Prozess zu beenden. Satanicpuppy vor 15 Jahren 0
0
Powerlord

Signal 9 ist SIGKILL. Beim Senden eines SIGKILL wird das Betriebssystem aufgefordert, den Prozess sofort abzubrechen, ohne dass Fragen gestellt werden. Der Prozess wird nicht im Voraus informiert und hat keine Chance, sich selbst zu säubern.

Signal 15 ist SIGTERM. Beim Senden eines SIGTERM wird das Betriebssystem aufgefordert, den Prozess zum Herunterfahren aufzufordern.

SIGKILL kann ignoriert werden, wenn das Betriebssystem der Meinung ist, dass der Prozess IO ausführt, oder wenn es sich um einen Zombie handelt (Ein untergeordneter Prozess, dessen Eltern nicht danach bereinigt wurden).

SIGTERM wird von der Anwendung möglicherweise ignoriert. Es wird jedoch nicht empfohlen, dass Anwendungen dies tun, da Betriebssysteme SIGTERM während des Herunterfahrens senden, gefolgt von SIGKILL, falls ein Programm noch ausgeführt wird.

Hinweis: Die Befehlszeile killfordert das Betriebssystem immer auf, ein Signal an die Anwendung zu senden, das je nach Eigentümer des Prozesses usw. erfolgen kann oder nicht.