08-练习
12.4 练习
12-1. 编写一个程序,以用户名作为命令行参数,列表显示该用户下所有正在运行的进程ID和命令名。(程序清单8-1中的userIdFromName()函数对本题程序的编写可能会有所帮助。)通过分析系统中/proc/PID/status文件的Name:和Uid:各行信息,可以实现此功能。遍历系统的所有/proc/PID目录需要使用readdir(3)函数,18.8节对其进行了描述。程序必须能够正确处理如下可能性:在确定目录存在与程序尝试打开相应/proc/PID/status文件之间,/proc/PID目录消失了。
12-2. 编写一个程序绘制树状结构,展示系统中所有进程的父子关系,根节点为init进程。对每个进程而言,程序应该显示进程ID和所执行的行命令。程序输出类似于pstree(1)的输出结果,但也无需像后者那样复杂。每个进程的父进程可通过对/proc/PID/status系统文件中PPid:行的分析获得。但是需要小心处理如下可能性:在扫描所有/proc/PID目录的过程中,进程的父进程(以及父进程的/proc/PID目录)消失了。
12-3. 编写一个程序,列表展示打开同一特定路径名文件的所有进程。可以通过分析所有/proc/PID/fd/*符号链接的内容来实现此功能。这需要利用readdir(3)函数来嵌套循环,扫描所有/proc/PID目录以及每个/proc/PID目录下所有/proc/PID/fd的条目内容。读取/proc/PID/fd/n符号链接的内容,需要使用readlink(),18.5节对其进行了描述。