Skip to main content

M1 pstree

jyy课实验的第一个“热身小练习”

找到一个有意思的网站https://www.maizure.org/projects/decoded-gnu-coreutils/

里面有一张图

将大多数CLI的共性抽离出来,我认为前两个阶段叫做前端,后一个EXECUTE是后端

让我猜猜,首先我猜测有一个可以获得所有进程数量的syscall,然后还有一个通过传入特定的pid参数可以获得这个进程的所有信息,所以我觉得这两个就完全够了

在读后面的文章之前我想自己来探索一下,STFW,我终于知道为啥自己不喜欢STFW了,查不到….,不知道是不是自己搜索方式的问题,让我问问gpt我该怎么查,似乎本质的原因是我英语阅读速度有点慢,检索速度太慢,但是换成中文又查不到有用的,寄

好的,继续往下看,感觉自己像个小丑

哎,我咋没想到需要快照呢。。。如果像我那种动态获取肯定是不行的。。。。

还得是万物皆文件,这套思想不知道可以少多少个api,但是windows就不行,需要很多个api

哪种更好呢

Everything is a file 和提供 type-safe 的 API 都不是完美的。前者对人类用户来说更好用,例如可以用 UNIX 命令行工具任意解析而不需要写代码,但带来系统中很多 “隐藏在角落里的特性”;后者把规约写在 API 里,可以在你犯错时更好地保护你、运行也更高效,但 “上手” 也稍稍困难一些:Windows Kernel + GDI 的 Windows API 就在 1,000 个以上。但是,我们预见到大语言模型和程序合成 (“低代码”) 技术能够从根本上改变我们开发的方式,操作系统 API 会逐渐成为一种只有库函数使用的 “汇编语言”。—来自文档

嘿嘿,还记得第一张图片吗,已经列出解决问题的步骤啦

前端

我打算使用getopt来分析参数等,nemu不是之前写过来着,参考一下

后端

得到系统中进程的编号

用的是scandir(libc)来做的遍历

读取/proc/{pid}/stat文件获得这个进程的基本信息(ps就是这么获取的)

之后变成树结构….哎,数据结构课基本没听,马上要期中考试了,正好复习一下

首先存储树,就是双亲存储,然后递归打印

然后就得到了一个基本款的pstree

最后一小步就是支持-np

真正的pstree似乎还会列出一个进程的子线程,但是我觉得就没有必要了