-3

我想了解 linux 中 top 命令的实现,即它如何使用 procfs 接口来显示运行最频繁的进程。我应该参考哪些来源。

4

1 回答 1

3

首先,仔细阅读proc(5)。然后研究 procps 的代码以及 tangrs 评论的unixtop代码,即top-3.7.ta​​r.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 回答