Como eu mato um thread do kernel? E eu realmente quero fazer isso?

8

Como aprendi com essa pergunta , os [bracketed]processos listados pelo ps auxcomando são threads do kernel. Então, existe uma maneira de matá-los a partir da linha de comando? Caso contrário, acho que o motivo disso é salvar o usuário de um risco maior de ter pânico no kernel, certo?

matemática
fonte

Respostas:

9

Você não pode matar os threads do kernel ou qualquer processo bloqueado no estado D, porque os sinais são entregues apenas quando o kernel retorna ao modo de usuário. Além da limitação técnica da entrega do sinal, matar um encadeamento no meio do código do kernel corromperia o sistema, pois o código do kernel pode conter um recurso importante no momento, como um bloqueio de rotação ou mutex, e matá-lo impediria aqueles recursos sejam liberados.

Se você tiver um processo que está parado no estado D por um período prolongado, há um bug no kernel. Veja https://wiki.ubuntu.com/KernelTeam/KernelTeamBugPolicies para obter dicas sobre como denunciá-lo.

psusi
fonte
2

Threads do Kernel são threads necessários criados pelo seu Kernel para gerenciar seu sistema.

Nem todos são necessários, mas todos (a maioria) são todos benéficos e geralmente não exigem recursos extras, não há razão para que em condições normais alguém pense em matar um thread do Kernel.

O Linux Kernel pode criar e destruir esses threads quando necessário; você não deve se preocupar com eles, e matar na maioria das circunstâncias não é algo que você possa fazer.

Bruno Pereira
fonte
E se eu tiver um encadeamento em suspensão ininterrupta que bloqueie um recurso do sistema, como um dispositivo montado com mount ou outro hardware, que desejo liberar matando o encadeamento?
math
11
Registre um bug contra ele se você achar que é útil (e não uma falha no seu sistema) e esperar que ele seja resolvido em breve.
Bruno Pereira
Eu tentaria descobrir o que há de errado com a montagem antes de decidir que matar os threads do kernel era a solução.
Bruno Pereira
Eu não sou um hacker do kernel, mas usuário de certos drivers do kernel. É claro que eu deveria fazer um relatório de erro se algum dispositivo não funcionar corretamente, mas tenho que esperar pelo menos meio ano, para que o próximo ubuntu traga essa correção. Eu acho que esse é um cenário válido e o kernel do linux deve ter a possibilidade de interromper uma determinada ação e liberar recursos (se houver algum).
math
você entendeu que provavelmente o thread do kernel foi iniciado por outro processo, portanto, provavelmente não há nada errado com esse thread do kernel, exceto o processo iniciado que se esqueceu de fechá-lo. Eu entendo o que você está dizendo, mas não acho que seja aconselhável matar os threads do kernel.
Bruno Pereira