Ich habe versucht, alle meine zuvor unter KUbuntu eingereichten Hintergrundjobs von zu töten
kill -9 $(jobs -p)
Obwohl dieser Befehl sofort die Nachricht wie gab
[1] Myjob1 getötet
[2] Myjob2 getötet
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 Free nicht geändert wird.
Also muss ich sie wohl nicht richtig getötet haben. Kann mir bitte jemand erklären, was mit mir passiert und was ich tun soll?
Ich fand oben heraus, dass ich, wenn ich k eingebe und die PID eingebe, die Prozesse einzeln beenden kann. Also unterscheidet sich das vom Befehl kill?
Ich habe auch irgendwo online http://www.ruhr.de/home/smallo/award.html gefunden, dass ich kill -9 nicht empfehle
Nutzlose Verwendung von Kill -9-Serienbrief
(Zitat Greuel)
Nein nein Nein. Verwenden Sie nicht kill -9.
Es gibt dem Prozess keine Chance, sauber:
1) Sockelverbindungen abschalten
2) Bereinigen Sie temporäre Dateien
3) informieren Sie seine Kinder, dass es weggeht
4) Setzen Sie die Klemmeneigenschaften zurück
und so weiter 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 die Binärdatei, da sich das Programm schlecht verhält!
Verwenden Sie nicht kill -9. Nehmen Sie den Mähdrescher nicht heraus, nur um den Blumentopf aufzuräumen.
Ist das wahr? Was bedeutet es mit "15 senden", "2 senden" und "1 senden"? Befehlen sie sich selbst oder "kill -15 PID", "kill -2 PID" und "kill -1 PID"?
Danke und Grüße!
Antworten:
Ihr Prozess ist wahrscheinlich tot, wird aber dennoch im Eintrag der Prozesstabelle angezeigt, da es sich um einen "Zombie-Prozess" handelt. Wenn ein untergeordneter Prozess beendet wurde und vollständig verschwand (mit Ausnahme seines Prozesstabelleneintrags) und der übergeordnete Prozess seinen Beendigungsstatus (über eine der Wartefunktionen) nicht abrufen konnte, wird er als Zombie bezeichnet ... Das Töten (durch Signal) eines Zombies wird nicht möglich arbeiten, weil es bereits beendet ist. Was Sie tun müssen, ist, den übergeordneten Prozess herauszufinden und diesen einen sauberen zu töten, ohne kill - 9 zu verwenden
Hier sind zwei einfache Schritte, um einen Zombie zu töten ...
quelle
-f
Flag für ps, um die übergeordneten Prozesse anzuzeigen.siehe
man kill
für eine Definition der verschiedenen verfügbaren Signale, aber ja.Diese informieren einen Prozess darüber, dass der Benutzer mit dem Prozess "fertig" ist, obwohl sie etwas andere Gründe angeben. SIGTERM kann als "Beenden der aktuellen Aufgabe, aber dann beenden; keine andere starten" interpretiert werden. SIGINT bedeutet "Verlassen, was Sie tun" tun und beenden ", bedeutet SIGHUP nur, dass niemand mehr zuhört (ein Serverprozess kann legitimerweise auf SIGHUP reagieren, indem er seine Konsolenausgabe abbricht und weiterläuft).
quelle
Es bedeutet, stattdessen
kill -15 PID
(oder eine andere Nummer) zu verwendenkill -9 PID
. Die Zahlen entsprechen verschiedenen Unix-Signalen .quelle
Dies bedeutet, dass Sie "kill -1" oder "kill -15" eingeben, anstatt "kill -9" einzugeben. Kill -9 ist eine Hardcore-Kugel im Kopf eines laufenden Prozesses. Sie tötet sie in einem schmutzigen Zustand, der dazu führen kann, dass Speicher verloren geht, bla bla.
Wenn Sie kill -9 eingeben und es nicht funktioniert, möchte ich sicherstellen, dass der Prozess nicht erneut ausgeführt wird und dass Sie die Berechtigung haben, diesen Prozess zu beenden.
quelle
Signal 9 ist SIGKILL. Das Senden eines SIGKILL fordert das Betriebssystem auf, den Prozess sofort abzubrechen, ohne dass Fragen gestellt werden. Der Prozess wird nicht im Voraus benachrichtigt und hat keine Chance, nach sich selbst aufzuräumen.
Signal 15 ist SIGTERM. Beim Senden eines SIGTERM wird das Betriebssystem aufgefordert, den Prozess zum Herunterfahren aufzufordern.
SIGKILL wird möglicherweise ignoriert, wenn das Betriebssystem glaubt, dass der Prozess E / A ausführt, oder wenn es sich um einen Zombie handelt (ein untergeordneter Prozess, dessen Eltern danach nicht aufgeräumt haben).
SIGTERM wird möglicherweise von der Anwendung ignoriert, es wird jedoch nicht empfohlen, dass Anwendungen dies tun, da Betriebssysteme SIGTERM während des Herunterfahrens senden, gefolgt von SIGKILL, wenn noch ein Programm ausgeführt wird.
Hinweis: Die Befehlszeile
kill
fordert das Betriebssystem immer auf, ein Signal an die Anwendung zu senden. Dies kann je nach Eigentümer des Prozesses usw. geschehen oder nicht.quelle