linux中top命令的工作原理

时间:2014-06-17 08:50:01

标签: linux top-command

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

1 个答案:

答案 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)的过程。我把它作为练习留给读者......