-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;
}

/proc/これは非常に高速です。ファイルシステムは疑似ファイルシステムであり、そのファイルの内容はオンザフライおよびオンデマンドで計算されるため、ディスク I/O は関与しません。これらの疑似ファイル (/proc/1234/statmなど/proc/1234/statusなど) は、順番に読み取る必要があります。

ユーザーモードの CPU 時間が必要な場合は、 (またはpid 1234 のプロセスの) の 14番目のフィールド ( utime ) を解析できます。それは読者の課題として残しておきます..../proc/self/stat/proc/1234/stat

于 2014-06-17T08:53:20.067 に答える