kthreadd 是否包含在 linux 进程中?

Is kthreadd included in the linux processes?

我的任务是实现 pstree 的简单版本(linux 命令),而我对 pstree 显示的内容和我在 [=] 下找到的内容感到困惑15=] 目录。 我输入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

似乎还有另一个进程kthreaddsystemd并行。这与 pstree 命令中显示的内容不同。

看了一些手册和网络资料,我知道pstree显示所有runnnig进程,kthreadd是所有相关线程的根线程。但我仍然感到困惑,kthreadd 不算作 pstree 命令的 运行 进程。所以就好像 kthreadd 不是一个进程,即使它拥有一个 pid(即 2)?我是否应该在我的 pstree 版本中将 kthreadd 作为 运行 进程包括在内?

kthreadd 不是由 systemd 启动的进程。 Kthreadd 是内核地址 space 中的工作线程,由 kernel.

启动

pstree 更多地与显示父子层次结构的用户 space 进程有关。

我认为您不应该在您的实现中包含 kthreadd。 查找内核线程的方法之一是 /proc/$pid/cmdline is empty for kernel threads.