GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist, wenn „kill -9“ nicht funktioniert?

Ich habe einen Prozess, den ich nicht mit kill -9 <pid> beenden kann . Was ist das Problem in einem solchen Fall, zumal ich der Eigentümer dieses Prozesses bin. Ich dachte, nichts könnte diesem kill entgehen Option.

Akzeptierte Antwort:

kill -9 (SIGKILL) funktioniert immer, vorausgesetzt, Sie haben die Berechtigung, den Prozess zu beenden. Grundsätzlich muss der Prozess entweder von Ihnen gestartet werden und darf nicht setuid oder setgid sein, oder Sie müssen root sein. Es gibt eine Ausnahme:selbst root kann kein fatales Signal an PID 1 senden (die init Prozess).

Aber kill -9 nicht garantiert sofort funktioniert . Alle Signale, einschließlich SIGKILL, werden asynchron geliefert:Der Kernel kann seine Zeit brauchen, um sie zu liefern. Normalerweise dauert die Lieferung eines Signals höchstens einige Mikrosekunden, genau die Zeit, die das Ziel benötigt, um eine Zeitscheibe zu erhalten. Wenn das Ziel jedoch das Signal blockiert hat, wird das Signal in die Warteschlange gestellt, bis das Ziel es entsperrt.

Normalerweise können Prozesse SIGKILL nicht blockieren. Aber Kernel-Code kann Kernel-Code ausführen, und Prozesse führen Kernel-Code aus, wenn sie Systemaufrufe aufrufen. Der Kernel-Code blockiert alle Signale, wenn eine Unterbrechung des Systemaufrufs zu einer schlecht geformten Datenstruktur irgendwo im Kernel führen würde, oder allgemeiner, dass eine Kernel-Invariante verletzt wird. Wenn also (aufgrund eines Fehlers oder Fehldesigns) ein Systemaufruf auf unbestimmte Zeit blockiert, gibt es möglicherweise keine Möglichkeit, den Prozess zu beenden. (Aber der Prozess wird beendet werden, wenn es jemals den Systemaufruf abschließt.)

Ein in einem Systemaufruf blockierter Prozess befindet sich im unterbrechungsfreien Ruhezustand. Das ps oder top Der Befehl zeigt es (auf den meisten Unices) im Zustand D (ursprünglich für „d isk“, denke ich).

Ein klassischer Fall von langem, unterbrechungsfreiem Ruhezustand sind Prozesse, die über NFS auf Dateien zugreifen, wenn der Server nicht antwortet; Moderne Implementierungen neigen dazu, keinen unterbrechungsfreien Ruhezustand zu erzwingen (z. B. unter Linux, das intr Die Mount-Option erlaubt einem Signal, den Zugriff auf NFS-Dateien zu unterbrechen).

Wenn ein Prozess längere Zeit im ununterbrechbaren Ruhezustand bleibt, können Sie Informationen darüber erhalten, was er tut, indem Sie einen Debugger daran anhängen, ein Diagnosetool wie strace oder dtrace (oder ähnliche Tools, abhängig von Ihrer Unix-Variante) ausführen oder mit anderen Diagnosemechanismen wie /proc/PID/syscall unter Linux. Weitere Informationen zur Untersuchung eines Prozesses im unterbrechungsfreien Ruhezustand finden Sie unter Der wget-Prozess kann nicht mit "kill -9" beendet werden.

Verwandte:Wie funktioniert die Lizenz für das LGPL-Open-Source-Framework?

Manchmal sehen Sie Einträge, die mit Z gekennzeichnet sind (oder H unter Linux weiß ich nicht, was der Unterschied ist) im ps oder top Ausgang. Technisch gesehen sind dies keine Prozesse, sondern Zombie-Prozesse, die nichts anderes als ein Eintrag in der Prozesstabelle sind, die herumgeführt werden, damit der Elternprozess über den Tod seines Kindes benachrichtigt werden kann. Sie werden verschwinden, wenn der übergeordnete Prozess darauf achtet (oder stirbt).


Linux
  1. Was ist ein Makefile und wie funktioniert es?

  2. Was ist NGINX? Wie funktioniert es?

  3. Was hat meinen Prozess zerstört und warum?

  4. Wie funktioniert Rm? Was macht Rm?

  5. Was macht kill -- -0?

Linux Setuid funktioniert nicht?

Was bedeutet in der Ausgabe von Ps?

Linux – Warum funktioniert Setuid nicht?

Was zeigt diese Prozessstatistik an?

Warum funktioniert `exit &` nicht?

Wie funktioniert ein Load Balancer? Was ist Load-Balancing?