나는 프로그램에 사용자 공간과 커널 공간이라는 두 가지 "레벨"이 있다는 것을 알고 있습니다.
내 질문은: 커널 프로그램만 보고 싶거나 커널 공간에 있는 프로그램만 보고 싶습니다.
이것이 올바른 접근 방식입니까?
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
커널 프로세스(또는 "커널 스레드")는 kthreadd
PID 2()의 하위 프로세스이므로 이것이 더 정확할 수 있습니다.
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
[..]