jyyOS-M1:打印进程树
date
Oct 13, 2024
slug
jyyOS-m1-print-pstree
status
Published
tags
操作系统
summary
打印进程树实现。
type
Post
实现上不一定正确,也有可能随着不断的学习来修改实现,写下这个权当对实验内容的整理和复习,仅供自己参考。
我先尝试从1号进程输出一个pstree,不考虑命令行中的option.
问题可以被分为几个部分:
- 如何得到pid.
- 如何得到ppid.
- 以什么样的方式存储pid和ppid.
- 如何输出树。
- 以及最后需要考虑的问题,如何解析命令行参数。
如何存储pid和ppid
选择把
pid
、ppid
和进程名称name
定义在一个结构体中。The GNU C Library对
pid_t
的官方文档解释。Thepid_t
data type is a signed integer type which is capable of representing a process ID. In the GNU C Library, this is anint
.
将所有进程存放在数组中,每个元素都是
Process
结构体。并且定义进程数量。得到pid和ppid
如实验指导所言,
Everying is a
file
(说明相关的C中的函数和API一定是相当重要的),我们可以通过 /proc
文件夹下以数字命名的目录来获取进程:struct dirent
的官方解释。我自己直接搜members of dirent structure还借助了stack overflow上的回答。
DIR data type
的官方解释。在
read_status_file
函数中,sprintf
、fgets
、strncmp
以及sscanf
的用法对我来说都是比较陌生的,但ChatGPT告诉我这些函数在读取和解析文件内容中都是很常用的。输出树
最容易想到的方法应该就是递归了,将当前进程的
pid
与进程数组中数组们的ppid
,进行对比来作为是否可以进入递归函数的条件。不再赘述。解析命令行参数
getopt_long
真的很好用。C parse short option and long option in the command line.
jyy老师在实验指导最后提出的问题自己还不能做出解答,继续深入往下学习吧。