Linux: é possível ver apenas threads / processos no espaço do kernel?

27

Eu sei que existem dois "níveis" de programas: espaço do usuário e espaço do kernel.

Minha pergunta é: eu quero ver apenas programas do kernel, ou melhor: programas no espaço do kernel.

Essa abordagem está correta?

ps -ef|grep "\["

root         1     0  0 20:23 ?        00:00:00 init [4]
root         2     0  0 20:23 ?        00:00:00 [kthreadd]
root         3     2  0 20:23 ?        00:00:00 [ksoftirqd/0]
root         5     2  0 20:23 ?        00:00:00 [kworker/0:0H]
root         7     2  0 20:23 ?        00:00:06 [rcu_sched]
root         8     2  0 20:23 ?        00:00:00 [rcu_bh]
root         9     2  0 20:23 ?        00:00:00 [migration/0]
root        10     2  0 20:23 ?        00:00:00 [migration/1]
root        11     2  0 20:23 ?        00:00:00 [ksoftirqd/1]
root        13     2  0 20:23 ?        00:00:00 [kworker/1:0H]
root        14     2  0 20:23 ?        00:00:00 [migration/2]
....
elbarna
fonte
5
> é possível ver programas espaciais do kernel? ... Sim! Você simplesmente precisa do filtro astronômico correto no seu CCD ... ;-) #
RubberStamp
5
Os programas espaciais do @steve Kernel são realmente estritamente tangenciais aos módulos. Nem todos os módulos possuem processos e nem todos os processos são módulos.
Chris Baixo
3
A pergunta está errada: você deseja ver processos do kernel (ou threads do kernel, ou tarefas do kernel) e não programas do kernel .... Existe apenas um programa envolvido: o kernel (e os módulos do kernel são adicionados ao kernel).
Basile Starynkevitch
Vou corrigir agora
elbarna

Respostas:

42

Os processos do kernel (ou "threads do kernel") são filhos do PID 2 ( kthreadd), portanto, isso pode ser mais preciso:

ps --ppid 2 -p 2 -o uname,pid,ppid,cmd,cls

Adicione --deselectpara inverter a seleção e ver apenas os processos de espaço do usuário.

(Esta questão foi praticamente uma inversa exata desta .)

Nos kernels 2.4. * E mais antigos, essa convenção do PID 2 ainda não existia.

telcoM
fonte
Sempre é verdade? Veja o quarto comentário nesta pergunta: stackoverflow.com/q/12213445/1971003
Guy Avraham
É possível que no começo do 2.6. * Kernels a conversão para a convenção "filho do PID 2" não estivesse completa. Como o HighKing indica lá, o nome do PID 2 também não havia sido totalmente estabilizado em kthreadd2.6.18. Se você estiver interessado em detalhes exatos, acesse o kernel.org e use a interface do navegador git para detalhar o histórico inicial dos kernel/kthread.carquivos.
TelcoM 19/08/19
4

Os threads do kernel não usam RAM (ou pelo menos são exibidos para não usar nenhum):

ps -eo cmd,vsize,rss | grep -E ' 0 +0$'
Patrick Mevzek
fonte
1

Se você tunainstalou, pode listar todos os threads do kernel como este:

$ tuna -U -P
                      thread       ctxt_switches
    pid SCHED_ rtpri affinity voluntary nonvoluntary             cmd 
  2      OTHER     0     0xff       290            1        kthreadd  
  3      OTHER     0     0xff         2            0          rcu_gp  
  4      OTHER     0     0xff         2            0      rcu_par_gp  
  6      OTHER     0        0        13            0 kworker/0:0H-kblockd  
  9      OTHER     0     0xff         2            0    mm_percpu_wq  
  10     OTHER     0        0       448            0     ksoftirqd/0
[..]
maxschlepzig
fonte