Linux: Kann man nur Kernel-Space-Threads / -Prozesse sehen?

27

Ich weiß, dass es zwei "Ebenen" von Programmen gibt: User Space und Kernel Space.

Meine Frage ist: Ich möchte nur Kernel-Programme sehen, oder besser: Programme im Kernel-Space.

Ist dieser Ansatz richtig?

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
quelle
5
> Kann man Kernel-Space-Programme sehen? ... Ja! Sie brauchen nur den richtigen astronomischen Filter auf Ihrem CCD ... ;-)
RubberStamp
5
@ Steve Kernel Raumfahrtprogramme sind wirklich streng tangential zu Modulen. Nicht alle Module haben Prozesse und nicht alle Prozesse sind Module.
Chris Down
3
Die Frage ist falsch: Sie möchten Kernel-Prozesse (oder Kernel-Threads oder Kernel-Tasks) und keine Kernel-Programme sehen. Es ist nur ein Programm beteiligt: ​​Der Kernel (und die Kernel-Module werden dem Kernel hinzugefügt ).
Basile Starynkevitch
Ich werde jetzt korrigieren
Elbarna

Antworten:

42

Kernel-Prozesse (oder "Kernel-Threads") sind untergeordnete Elemente von PID 2 ( kthreadd), daher ist dies möglicherweise genauer:

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

Hinzufügen --deselect, um die Auswahl umzukehren und nur Benutzerbereichsprozesse anzuzeigen.

(Diese Frage war ziemlich genau umgekehrt zu dieser .)

In 2.4. * Und älteren Kerneln gab es diese PID 2-Konvention noch nicht.

telcoM
quelle
Ist es immer wahr Siehe den vierten Kommentar in dieser Frage: stackoverflow.com/q/12213445/1971003
Guy Avraham
Es ist möglich, dass in frühen 2.6. * -Kernen die Umstellung auf die Konvention "Kind von PID 2" nicht vollständig war. Wie HighKing dort angibt, hatte sich der Name von PID 2 bis kthreadd2.6.18 ebenfalls nicht vollständig stabilisiert . Wenn Sie an genauen Details interessiert sind, gehen Sie zu kernel.org und verwenden Sie die Git-Browser-Oberfläche, um einen Drilldown in die frühe Geschichte der kernel/kthread.cDatei durchzuführen .
TelcoM
4

Kernel-Threads verwenden überhaupt keinen RAM (oder es wird zumindest angezeigt, dass sie keinen RAM verwenden):

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

Wenn Sie tunainstalliert haben, können Sie alle Kernel-Threads wie folgt auflisten:

$ 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
quelle