我想了解 linux 中 top 命令的实现,即它如何使用 procfs 接口来显示运行最频繁的进程。我应该参考哪些来源。
问问题
840 次
1 回答
3
首先,仔细阅读proc(5)。然后研究 procps 的代码,以及 tangrs 评论的unixtop的代码,即top-3.7.tar.gz
例如,您的程序可能会
{ FILE* psf = fopen("/proc/self/statm", "r");
if (psf) {
int progsize = 0;
fscanf(psf, "%d", &progsize);
printf ("program size is %d pages\n", progsize);
fclose(psf);
} else perror("fopen /proc/self/statm");
}
打印自己的程序大小。你可以把它变成一个函数:
int get_my_program_size(void) {
int progsize = -1;
FILE* psf = fopen("/proc/self/statm", "r");
if (psf) {
fscanf(psf, "%d", &progsize);
fclose(psf);
} else perror("get_my_program_size /proc/self/statm");
return progsize;
}
这真的很快:不涉及磁盘 i/o,因为/proc/
文件系统是一个伪文件系统,它的文件内容是动态和按需计算的。这些伪文件(如/proc/1234/statm
或/proc/1234/status
等....)应按顺序读取。
如果您想要用户模式的 CPU 时间,您可以解析(或pid 1234 的进程)的第 14个字段(utime) 。我把它作为练习留给读者....../proc/self/stat
/proc/1234/stat
于 2014-06-17T08:53:20.067 回答