我发现我可以从 /proc/[pid]/stat 文件的第一列中获取 PID(第一列)。我不确定在哪里可以找到其余的属性。我的猜测是我们需要根据其他一些属性计算 %CPU 和 %MEM。有人可以帮我解决这个问题吗?我的 GUI 看起来应该和 top 完全一样。我使用 Python3 和 ttk 作为 GUI。
答案1
如果您输入:
strace -o outfile top
它将top
像往常一样运行,同时跟踪它所做的所有系统调用并将结果放入outfile
.它打开的文件作为对系统调用的调用可见open(2)
。运行此命令后,您应该top
快速退出,因为它会不断附加大量数据,只需几秒钟就足以告诉您它读取的内容。
在我自己的系统上快速运行,看来大部分数据来自/proc/<pid>/stat
、/proc/<pid>/status
和/proc/<pid>/statm
。一些搜索和实验应该可以让您确定这些的格式。
答案2
man 5 proc 有很多你可以在 proc 文件系统中找到的详细信息。
procps 库基本上是一堆东西,它们读取该文件系统中的文件,解析它们,并根据它找到的内容设置变量或结构。一般来说,“为什么 ps/top 等显示值 X”的答案是“因为这就是文件 Z 中的内容”
我们正在积极重新设计 procps 的 libproc/libprocps/libwhatwillwecallitnext 库,使其更像一个普通的库。
目前只有 C 绑定(因为我们需要这些),但将来可能还会有其他绑定。 API 需要首先稳定下来,我们需要将新库放到那里并查看它在现实世界中的工作情况,然后我们可以对此进行研究。
查看顶级源代码是另一个想法,问题是如果您自己开发,则需要跟踪内核人员对 procfs 所做的所有操作,而库则是我们头疼的问题。