Linux: apakah mungkin melihat hanya thread / proses ruang kernel?

27

Saya tahu ada dua "level" program: Ruang pengguna dan ruang kernel.

Pertanyaan saya adalah: Saya hanya ingin melihat program kernel, atau lebih baik: program di ruang kernel.

Apakah pendekatan ini benar?

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
sumber
5
> apakah mungkin untuk melihat program ruang kernel? ... Iya nih! Anda hanya perlu filter astronomi yang benar pada CCD Anda ... ;-)
RubberStamp
5
@steve Program-program ruang kernel benar-benar benar-benar bersinggungan dengan modul. Tidak semua modul memiliki proses, dan tidak semua proses adalah modul.
Chris Down
3
Pertanyaannya salah: Anda ingin melihat proses kernel (atau utas kernel, atau tugas kernel) bukan program kernel .... Hanya ada satu program yang terlibat: kernel (dan modul kernel ditambahkan ke dalam kernel).
Basile Starynkevitch
Saya akan memperbaiki sekarang
elbarna

Jawaban:

42

Proses kernel (atau "utas kernel") adalah anak-anak dari PID 2 ( kthreadd), jadi ini mungkin lebih akurat:

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

Tambahkan --deselectuntuk membalikkan seleksi dan hanya melihat proses ruang pengguna.

(Pertanyaan ini agak kebalikan dari pertanyaan ini .)

Pada 2.4. * Dan kernel yang lebih lama, konvensi PID 2 ini belum ada.

telcoM
sumber
Apakah itu selalu benar? Lihat komentar keempat dalam pertanyaan ini: stackoverflow.com/q/12213445/1971003
Guy Avraham
Ada kemungkinan bahwa pada awal 2.6. * Kernel konversi ke konvensi "child of PID 2" tidak cukup lengkap. Seperti yang ditunjukkan oleh HighKing di sana, nama PID 2 juga belum sepenuhnya stabil hingga kthreadd2.6.18. Jika Anda tertarik pada detail yang tepat, buka kernel.org dan gunakan antarmuka browser git untuk menelusuri sejarah awal kernel/kthread.cfile.
telcoM
4

Utas kernel tidak menggunakan RAM sama sekali (atau setidaknya ditampilkan tidak menggunakan apa pun):

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

Jika sudah tunamenginstal, Anda dapat mendaftar semua utas kernel seperti ini:

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