Linux: è possibile vedere solo processi / thread dello spazio del kernel?


27

So che ci sono due "livelli" di programmi: spazio utente e spazio kernel.

La mia domanda è: voglio vedere solo i programmi del kernel, o meglio: programmi nello spazio del kernel.

Questo approccio è corretto?

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]
....

5
> è possibile vedere i programmi spaziali del kernel? ... Sì! Hai semplicemente bisogno del filtro astronomico corretto sul tuo CCD ... ;-)
RubberStamp,


5
I programmi spaziali del kernel @steve sono davvero strettamente tangenziali ai moduli. Non tutti i moduli hanno processi e non tutti i processi sono moduli.
Chris Down,

3
La domanda è sbagliata: vuoi vedere i processi del kernel (o thread del kernel, o attività del kernel) non i programmi del kernel .... C'è solo un programma coinvolto: il kernel (ei moduli del kernel sono aggiunti nel kernel).
Basile Starynkevitch,

Ora correggerò
elbarna il

Risposte:


42

I processi del kernel (o "thread del kernel") sono figli di PID 2 ( kthreadd), quindi questo potrebbe essere più accurato:

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

Aggiungi --deselectper invertire la selezione e visualizzare solo i processi dello spazio utente.

(Questa domanda era praticamente un esatto contrario di questa .)

Nei kernel 2.4. * E precedenti, questa convenzione PID 2 non esisteva ancora.


È sempre vero? Vedere il quarto commento in questa domanda: stackoverflow.com/q/12213445/1971003
Guy Avraham

È possibile che all'inizio dei kernel 2.6. * La conversione alla convenzione "figlio del PID 2" non fosse del tutto completa. Come indica HighKing, il nome di PID 2 non si era completamente stabilizzato a kthreadd2.6.18. Se sei interessato ai dettagli esatti, vai su kernel.org e usa l'interfaccia del browser git per approfondire la storia dei kernel/kthread.cfile.
telcoM,

4

I thread del kernel non usano affatto la RAM (o almeno sono visualizzati per non usare nessuno):

ps -eo cmd,vsize,rss | grep -E ' 0 +0$'

1

Se hai tunainstallato puoi elencare tutti i thread del kernel in questo modo:

$ 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
[..]
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.