プログラムには、ユーザー空間とカーネル空間という2つの「レベル」があることを知っています。
私の質問は次のとおりです。私は、カーネルプログラムのみ、またはそれ以上のカーネルスペース上のプログラムを見たいと思っています。
このアプローチは正しいですか?
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]
....
カーネルプロセス(または「カーネルスレッド」)はPID 2(kthreadd
)の子であるため、より正確になる可能性があります。
ps --ppid 2 -p 2 -o uname,pid,ppid,cmd,cls
追加 --deselect
選択を反転して、ユーザー空間プロセスのみを表示します。
(この質問は これ のほぼ逆でした。)
2.4。*以前のカーネルでは、このPID 2規則はまだ存在していませんでした。
カーネルスレッドは、RAM=をまったく使用しません(または、少なくとも使用しないように表示されています)。
ps -eo cmd,vsize,rss | grep -E ' 0 +0$'
tuna
がインストールされている場合は、次のようにすべてのカーネルスレッドを一覧表示できます。
$ 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
[..]