Come uccido un thread del kernel? E voglio davvero farlo?


8

Come ho appreso da questa domanda , i [bracketed]processi elencati dal ps auxcomando sono thread del kernel. Quindi c'è un modo per ucciderli dalla riga di comando? In caso contrario, suppongo che il motivo sia quello di salvare l'utente da un rischio maggiore di ottenere un panico nel kernel, giusto?

Risposte:


9

Non è possibile uccidere i thread del kernel o qualsiasi processo bloccato nello stato D, poiché i segnali vengono inviati solo quando il kernel torna in modalità utente. A parte la limitazione tecnica della consegna del segnale, uccidere un thread nel mezzo del codice del kernel danneggerebbe il sistema in quanto il codice del kernel potrebbe contenere una risorsa importante al momento, come un blocco di spin o mutex, e ucciderlo impedirebbe risorse dal rilascio.

Se hai un processo bloccato nello stato D per un periodo di tempo prolungato, allora hai un bug del kernel. Vedi https://wiki.ubuntu.com/KernelTeam/KernelTeamBugPolicies per suggerimenti su come segnalarlo.


2

I thread del kernel sono thread necessari creati dal kernel per gestire il sistema.

Non tutti sono necessari ma tutti (la maggior parte) tutti benefici e non richiedono per lo più risorse extra, non c'è motivo per cui si dovrebbe pensare di uccidere un thread del kernel in condizioni normali.

Linux Kernel può creare e distruggere quei thread quando necessario, non dovresti preoccuparti di loro e uccidere nella maggior parte dei casi non è qualcosa che puoi fare.


Cosa succede se ho un thread in modalità di sospensione ininterrotta che blocca una risorsa di sistema come un dispositivo montato con mount o altro hardware, che voglio rilasciare uccidendo il thread?
matematica,

1
Segnala un bug se lo ritieni utile (e non un problema con il tuo sistema) e speri che sia risolto presto.
Bruno Pereira,

Vorrei provare a scoprire cosa c'è che non va nel montaggio prima di decidere che uccidere i thread del kernel fosse la soluzione.
Bruno Pereira,

Non sono un hacker del kernel ma utente di determinati driver del kernel. Ovviamente dovrei fare un bug report se qualche dispositivo non funziona correttamente, ma devo aspettare almeno un anno e mezzo, quindi Ubuntu successivo porta questo bugfix. Penso che sia uno scenario valido e il kernel Linux dovrebbe avere la possibilità di interrompere una determinata azione e liberare risorse (se ne sono state occupate).
matematica,

hai capito che molto probabilmente il thread del kernel è stato avviato da un altro processo, quindi probabilmente non c'è nulla di sbagliato in quel thread del kernel tranne il processo che ha iniziato a dimenticarlo per chiuderlo. capisco quello che stai dicendo ma non credo sia nemmeno consigliabile uccidere i thread del kernel.
Bruno Pereira,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.