Включен ли kthreadd в процессы linux? - PullRequest
0 голосов
/ 26 февраля 2020

Мне поручено реализовать простую версию pstree (команда linux), хотя я запутался в содержании между тем, что показывает pstree, и тем, что я нахожу в каталоге /proc/[pid]. После того, как я напечатал pstree, он показывает, что root всего дерева процессов равно 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 является потоком root всех связанных потоков. , Но я все еще не уверен, что команда pstree не считает kthreadd запущенным процессом. То есть kthreadd - это не процесс, даже если ему принадлежит один pid (а это 2)? Должен ли я включить kthreadd в качестве запущенного процесса в мою версию pstree?

1 Ответ

0 голосов
/ 26 февраля 2020

kthreadd - это не процесс, запущенный systemd. Kthreadd - это демон рабочего потока (сам по себе поток ядра), запущенный kernel .

. Pstree больше связан с процессами пространства пользователя, которые показывают иерархию родительского и дочернего элементов.

По моему мнению, вы не должны включать kthreadd в вашу реализацию. Один из способов найти потоки ядра - это / proc / $ pid / cmdline, пустой для потоков ядра.

...