我的任务是实现一个简单版本的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
显示了所有 runnnig 进程,并且kthreadd
是所有相关线程的根线程。但是我仍然很困惑,kthreadd
这不算是pstree
命令运行的进程。所以kthreadd
即使它拥有一个pid(即2)也不是一个进程?我应该kthreadd
在我的版本中包含一个正在运行的进程pstree
吗?