Warum sollte ich nicht 'kill -9' / SIGKILL verwenden?

13

Ich habe diese Frage gestellt, weil ich überrascht war, dass sie nicht direkt beantwortet wurde. Entschuldigung, wenn dies ein Duplikat ist - ich habe gesucht!

Ich habe das gehört kill -9oder kill -SIGKILLbin schlecht, aber ich verstehe nicht warum. Wenn ich nicht sollte, kill -9was sollte ich tun, um einen Prozess zu beenden?

dimo414
quelle
2
Die Voraussetzung der Frage ist falsch. SIGKILL ist nur ein Werkzeug. Es wird in einigen Situationen empfohlen und in anderen Situationen nicht empfohlen (wie bei allen anderen Tools).
Kubanczyk
@kubanczyk sicher, aber es ist ein oft falsch angewandtes Werkzeug und verwendet, ohne den Zweck zu verstehen. Ich habe viele Threads gesehen, in denen A sagt " Just kill -9it ", OP sagt " great, that works! Ich werde mich von jetzt an daran erinnern! " Und B warnt " wait kill -9is dangerous! " Erst nachträglich.
dimo414

Antworten:

15

SIGKILLZieht den Teppich aus dem laufenden Prozess heraus und beendet ihn sofort. Für sehr einfache Programme ist dies in Ordnung. In der Praxis gibt es jedoch nur sehr wenige "einfache" Programme.

Unter dem Deckmantel erledigen sogar trivial anmutende Programme alle Arten von Transaktionsarbeit, die sie vor dem Beenden bereinigen müssen (denken Sie an den finallyBlock in Java und anderen Programmiersprachen), wie das Schließen von Ressourcen-Handles, das Löschen temporärer Dateien und das Löschen von Daten aus Speicher auf Festplatte. Sie können nicht vorhersagen, wann ein Programm so etwas tut.

Wenn Sie Glück haben, werden Sie nichts falsches bemerken, wenn Sie eine senden SIGKILL, aber Sie können nicht für immer Glück haben, und Sie wissen möglicherweise nicht, dass etwas schief gelaufen ist, bis es zu spät ist, um das Verlorene wiederzugewinnen.

Sie sollten fast nie eine senden SIGKILLmüssen und Sie sollten sicher sein, dass Sie Ihre Alternativen ausgeschöpft haben, bevor Sie dies tun. In vielen Fällen ist ein Neustart (der schließlich SIGKILLs an Programme sendet , die sich nicht richtig verhalten) sicherer als das manuelle Senden eines eigenen Programms SIGKILL. Ich kann wahrscheinlich die Anzahl der an einer Hand abzählen Ich habe benötigt eine senden SIGKILL(und wahrscheinlich alle meine eigenen machen).

Im Allgemeinen können Sie Ctrl+ C(das den Vordergrundprozess a sendet SIGINT) oder SIGTERM(wie in "terminate") verwenden, um einen Prozess anzuweisen, anzuhalten, was er tut, und zu beenden.

Einige weitere Lektüre:

dimo414
quelle