我的任务是实现一个简单版本的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吗?