所以我目前正在使用 ncurses 和 Ubuntu proc 文件夹系统文件自行实现 top 命令,并且我试图在顶部输出的第四行和第五行上显示内存信息。我找到了 meminfo 文件在包含我要查找的信息的 /proc 文件夹中。
但是我注意到文件中的信息与 top 命令显示的信息略有不同。我想了解 meminfo 文件是否不是我应该使用的文件。
TL;博士 看起来 top 正在从 ubuntu 中的 /proc/meminfo 获取信息,因此那里的项目应该与 top 匹配(给出轻微的时间偏移)
================
看起来 top 命令来自 procps 包。 我不确定我是否拥有最新(甚至正确)顶部的源代码,但这是我使用的:https://github.com/soarpenguin/procps-3.0.5/tree/e17c6e5fbedb7e8ff423586937aac42300ef11a6
查看代码,顶部代码似乎使用了 sysinfo.c 中的 meminfo() 函数。
这是来自 top.c 的代码,似乎正在构建内存行...(来自 top.c)
static void frame_storage (void)
{
meminfo();
if (CHKw(Curwin, View_MEMORY)) {
show_special(fmtmk(MEMORY_line1
, kb_main_total, kb_main_used, kb_main_free, kb_main_buffers));
show_special(fmtmk(MEMORY_line2
, kb_swap_total, kb_swap_used, kb_swap_free, kb_main_cached));
Msg_row += 2;
}
}
这是来自 sysinfo.c 的代码(在同一个包中,但位于 /proc 子目录中),用于携带信息:
#define MEMINFO_FILE "/proc/meminfo"
...定义从哪里获取信息。 从 sysinfo.c 的第 286 行开始可以找到以下内容。 有 mem_table_struct 和关联的字符串,用于填充 /proc/meminfo 中的结构:
void meminfo(void){
char namebuf[16]; /* big enough to hold any row name */
mem_table_struct findme = { namebuf, NULL};
mem_table_struct *found;
char *head;
char *tail;
static const mem_table_struct mem_table[] = {
{"Active", &kb_active},
{"Buffers", &kb_main_buffers},
{"Cached", &kb_main_cached},
{"Committed_AS", &kb_committed_as},
{"Dirty", &kb_dirty},
{"HighFree", &kb_high_free},
{"HighTotal", &kb_high_total},
{"Inact_clean", &kb_inact_clean},
{"Inact_dirty", &kb_inact_dirty},
{"Inact_target", &kb_inact_target},
{"Inactive", &kb_inactive},
{"LowFree", &kb_low_free},
{"LowTotal", &kb_low_total},
{"Mapped", &kb_mapped},
{"MemFree", &kb_main_free},
{"MemShared", &kb_main_shared},
{"MemTotal", &kb_main_total},
{"PageTables", &kb_pagetables},
{"ReverseMaps", &nr_reversemaps},
{"Slab", &kb_slab},
{"SwapCached", &kb_swap_cached},
{"SwapFree", &kb_swap_free},
{"SwapTotal", &kb_swap_total},
{"Writeback", &kb_writeback}
};
所以,是的,/proc/meminfo 在给定时间携带内存。 Top.c用它来显示。 也许您没有使用正确的字段或者存在时间差异,但代码似乎正在使用 /proc/meminfo。