Linux: возможно ли видеть только потоки пространства ядра / процесс?

27

Я знаю, что есть два «уровня» программ: пространство пользователя и пространство ядра.

У меня вопрос: я хочу видеть только программы ядра, или, что еще лучше, программы в пространстве ядра.

Правильный ли этот подход?

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
источник
5
> можно увидеть программы ядра пространства? ... Да! Вам просто нужен правильный астрономический фильтр на вашем ПЗС ... ;-)
RubberStamp
2
lsmod? en.wikipedia.org/wiki/Lsmod
Стив
5
Программы пространства ядра @steve действительно строго касаются модулей. Не все модули имеют процессы, и не все процессы являются модулями.
Крис Даун
3
Вопрос неправильный: вы хотите видеть процессы ядра (или потоки ядра, или задачи ядра), а не программы ядра .... Вовлечена только одна программа : ядро (и модули ядра добавляются в ядро).
Старынкевич,
Сейчас
поправлю

Ответы:

42

Процессы ядра (или «потоки ядра») являются потомками PID 2 ( kthreadd), так что это может быть более точным:

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

Добавить, --deselectчтобы инвертировать выделение и видеть только процессы пользовательского пространства.

(Этот вопрос был почти полностью противоположен этому .)

В 2.4. * И более старых ядрах это соглашение PID 2 еще не существовало.

Телком
источник
Это всегда правда? См. Четвертый комментарий в этом вопросе: stackoverflow.com/q/12213445/1971003
Гай Авраам
Возможно, что в ранних ядрах 2.6. * Преобразование в соглашение «child of PID 2» было не совсем полным. Как указывает HighKing, имя PID 2 также не полностью стабилизировалось на kthreadd2.6.18. Если вы заинтересованы в точных деталях, перейдите на kernel.org и используйте интерфейс браузера git, чтобы углубиться в раннюю историю kernel/kthread.cфайла.
Телеком
4

Потоки ядра вообще не используют ОЗУ (или, по крайней мере, отображаются, чтобы не использовать их):

ps -eo cmd,vsize,rss | grep -E ' 0 +0$'
Патрик Мевзек
источник
1

Если вы 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
[..]
maxschlepzig
источник