Wie töte ich einen Kernel-Thread? Und will ich das wirklich?

8

Wie ich aus dieser Frage gelernt habe , [bracketed]sind die vom ps auxBefehl aufgelisteten Prozesse Kernel-Threads. Gibt es eine Möglichkeit, sie über die Befehlszeile zu töten? Wenn nicht, liegt der Grund dafür vermutlich darin, den Benutzer vor einem höheren Risiko einer Kernel-Panik zu bewahren, oder?

Mathematik
quelle

Antworten:

9

Sie können keine Kernel-Threads oder Prozesse beenden, die im D-Status blockiert sind, da Signale nur geliefert werden, wenn der Kernel in den Benutzermodus zurückkehrt. Abgesehen von der technischen Einschränkung der Signalübertragung würde das Beenden eines Threads in der Mitte des Kernel-Codes das System beschädigen, da der Kernel-Code zu diesem Zeitpunkt möglicherweise eine wichtige Ressource wie eine Spin-Sperre oder einen Mutex enthält, und das Beenden dieser würde dies verhindern Ressourcen von der Freigabe.

Wenn Sie einen Prozess haben, der über einen längeren Zeitraum im D-Zustand steckt, liegt ein Kernel-Fehler vor. Siehe https://wiki.ubuntu.com/KernelTeam/KernelTeamBugPolicies für Hinweise darauf berichten.

psusi
quelle
2

Kernel-Threads sind notwendige Threads, die von Ihrem Kernel zur Verwaltung Ihres Systems erstellt wurden.

Nicht alle sind notwendig, aber alle (die meisten) alle sind nützlich und erfordern meist keine zusätzlichen Ressourcen. Es gibt keinen Grund, warum man unter normalen Bedingungen darüber nachdenken würde, einen Kernel-Thread zu beenden.

Der Linux-Kernel kann diese Threads bei Bedarf zerstören. Sie sollten sich keine Sorgen machen, und unter den meisten Umständen können Sie sie nicht beenden.

Bruno Pereira
quelle
Was ist, wenn sich ein Thread im ununterbrochenen Ruhezustand befindet, der eine Systemressource blockiert, z. B. ein mit Mount bereitgestelltes Gerät oder andere Hardware, die ich durch Beenden des Threads freigeben möchte?
Mathe
1
Melden Sie einen Fehler an, wenn Sie der Meinung sind, dass er nützlich ist (und kein Fehler in Ihrem System), und hoffen Sie, dass er bald behoben ist.
Bruno Pereira
Ich würde versuchen herauszufinden, was mit der Bereitstellung nicht stimmt, bevor ich mich entscheide, dass das Beenden von Kernel-Threads die Lösung ist.
Bruno Pereira
Ich bin kein Kernel-Hacker, sondern Benutzer bestimmter Kernel-Treiber. Natürlich sollte ich einen Fehlerbericht erstellen, wenn ein Gerät nicht richtig funktioniert, aber ich muss dann mindestens ein halbes Jahr warten, damit das nächste Ubuntu diesen Fehler behebt. Ich denke, das ist ein gültiges Szenario und der Linux-Kernel sollte die Möglichkeit bieten, eine bestimmte Aktion abzubrechen und Ressourcen freizugeben (falls vorhanden).
Mathe
Sie haben unser Verständnis, dass der Kernel-Thread höchstwahrscheinlich von einem anderen Prozess initiiert wurde. Wahrscheinlich ist an diesem Kernel-Thread nichts falsch, außer dass der Prozess, der gestartet wurde, vergessen hat, ihn zu schließen. Ich verstehe, was Sie sagen, aber ich denke nicht, dass es sogar ratsam ist, Kernel-Threads zu töten.
Bruno Pereira