我想了解linux中top命令的实现,即如何使用procfs接口显示最常运行的进程。我应该参考哪些来源。
答案 0 :(得分: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时间,你可以解析/proc/self/stat
(或/proc/1234/stat
的14 th 字段( utime )对于pid 1234)的过程。我把它作为练习留给读者......