Включен ли kthreadd в процессы Linux?
Мне поручено реализовать простую версию pstree
(команда linux), пока я не понимаю, что именно pstree
показывает и что я нахожу под /proc/[pid]
каталог. После того, как я наберуpstree
, он показывает, что корень всего дерева процессов systemd
, именно так:
systemd─┬─ECAgent───3*[{ECAgent}]
├─EasyMonitor
├─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
Хотя после того, как я пытаюсь прочитать все /proc/[pid]/stat
файлов, я получил следующий результат (сделайте небольшое форматирование):
pid comm state ppid
1 systemd S 0
2 kthreadd S 0
3 rcu_gp I 2
4 rcu_par_gp I 2
Похоже, идет другой процесс kthreadd
это параллельно с systemd
. Это отличается от того, что показано наpstree
команда.
После прочтения некоторых руководств и веб-материалов я знаю, что pstree
отображает все запущенные процессы и kthreadd
является корневым потоком всех связанных потоков. Но меня все еще смущает то, чтоkthreadd
не считается запущенным процессом pstree
команда. Так это какkthreadd
Разве это не процесс, даже если он владеет одним pid (а это 2)? Должен ли я включитьkthreadd
как работающий процесс в моей версии pstree
?
1 ответ
Kthreadd - это не процесс, запущенный systemd. Kthreadd - это рабочий поток в адресном пространстве ядра, запускаемый ядром.
pstree больше связан с процессами пользовательского пространства, которые показывают родительскую и дочернюю иерархии.
На мой взгляд, вам не следует включать kthreadd в свою реализацию. Один из способов найти потоки ядра: /proc/$pid/cmdline пуст для потоков ядра.