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似乎还会列出一个进程的子线程,但是我觉得就没有必要了