如果我想创建一个 GUI,它显示的数据与 LINUX 中的 TOP 命令完全相同,我从哪里获取数据?

如果我想创建一个 GUI,它显示的数据与 LINUX 中的 TOP 命令完全相同,我从哪里获取数据?

我发现我可以从 /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 所做的所有操作,而库则是我们头疼的问题。

相关内容