Включен ли 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 пуст для потоков ядра.

Другие вопросы по тегам