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
似乎还有另一个进程kthreadd
与systemd
并行。这与 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.
我的任务是实现 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
似乎还有另一个进程kthreadd
与systemd
并行。这与 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.