我知道程序有两个“级别”:用户空间和内核空间。
我的问题是:我只想看到内核程序,或者更好:内核空间上的程序。
这种做法正确吗?
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]
....
答案1
内核进程(或“内核线程”)是 PID 2 ( kthreadd
) 的子进程,因此这可能更准确:
ps --ppid 2 -p 2 -o uname,pid,ppid,cmd,cls
添加--deselect
以反转选择并仅查看用户空间进程。
(这个问题几乎与这个.)
在 2.4.* 及更早版本的内核中,此 PID 2 约定尚不存在。
答案2
内核线程根本不使用 RAM(或者至少显示不使用任何 RAM):
ps -eo cmd,vsize,rss | grep -E ' 0 +0$'
答案3
如果你有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
[..]