kill -9 wirkt nicht

serie300

Well-Known Member
Hallo

bisher war ich der Meinung, daß man mit 'kill -9' einen Prozeß sicher entfernen kann - egal wie böse der abgestürzt ist. Beim otter-browser ist dem nicht so. Beim Zugriff auf die Website eines gelben email Dienstleisters stürzt der so nachhaltig ab, daß auch kill -9 nicht wirkt. Der Rechner ist auch weiterhin benutzbar und der Prozessor core wird auch nicht vollständig ausgelastet. Auch Verlassen des Window Managers bringt nichts. Habe ich in den letzten jahren was übersehen bzgl 'kill -9' oder ist das etwa ein FreeBSD Fehler? Was müßte ich dann einem PR bzgl FreeBSD beifügen (kill -9 is not working as expected ist wohl etwas wenig)?
System: FreeBSD10.3 auf aktuellem Stand

Serie300
 
Hi,
es gibt durchaus Fälle, in denen ein SIGKILL ignoriert werden kann. Ein klassisches Beispiel ist, dass der Prozess in einem nicht unterbrechbaren Syscall wie read() hängt. Das kann zum Beispiel passieren, wenn eine Datei auf einem NFS-Share gelesen wird und der Server wegbricht. In vielen Fällen sind ignorierte SIGKILL aber Kernelbugs, Prozesse die aufgrund eines Deadlocks hängen und daher nicht auf das Signal reagieren. Das Problem dabei ist, dass solche Fälle alles andere als einfach zu debuggen sind. Für einen Bugreport wäre das Minimum die Ausgabe von 'procstat -kk $PID", die angibt, welche internen Locks auf dem Prozess liegen.
 
Was mir erstaunlich oft geholfen hat, ist xkill.
So lange es noch ein Fenster dafür gibt.
Ich will nun nicht behaupten, dass es immer zuverlässiger wirkt, als kill -9. Es gab aber wirklich Fälle, wo ich damit schon weiter kam. Es "räumt" zumindest mal den Müll vom Desktop und weil da vielleicht manchmal die Hänger liegen, kann es hilfreich sein.
 
Hi

Danke für die Erklärung. "Again what learned". Wenn ich es recht verstehe ist 'kill -9' also auf die Kooperation des Prozesses angewiesen; bei den anderen kill -n war mir das klar. Die Sache mit dem read() ist ein guter Ansatzpunkt - der Rechner hat beim runterfahren lange discs gesynct (bestes Denglisch). Andere Prozesse (s. xkill) waren's wohl nicht, da ich einen minimalistischen mwm Desktop habe und ich auch zurück in die Konsole mit weiterhin aktivem otter kam,
Das mit dem read() kenne ich von defekten USB-Sticks (das Zeug von den Messen).

Serie 300
 
Wenn ich es recht verstehe ist 'kill -9' also auf die Kooperation des Prozesses angewiesen; bei den anderen kill -n war mir das klar.
So halb. SIGKILL kann nicht gefangen oder ignoriert werden. Aber es gibt ein paar Fälle, in denen das Signal nicht ausgeliefert werden kann. Das sind, wenn ich mich richtig erinnere:
  • Prozesse die nicht unterbrechbar schlafen, weil sie auf etwa warten.
  • Prozesse, die bereits Zombies sind.
  • Prozesse, die der Kernel schützt. Auf einigen Unices z.B. init.
 
Zurück
Oben