"top"コマンドがどのプロセスで使用されたCPUパーセンテージをどのように計算するのか知りたいと思います。"top"コマンドによるunixでの単一プロセスによるCPUパーセンテージの計算
私は/ procディレクトリの "psinfo"バイナリファイルを読み込もうとしましたが、結果を見つけるのに役立たなかった。
どのように情報を入力してくださいか。
ありがとうございます。
"top"コマンドがどのプロセスで使用されたCPUパーセンテージをどのように計算するのか知りたいと思います。"top"コマンドによるunixでの単一プロセスによるCPUパーセンテージの計算
私は/ procディレクトリの "psinfo"バイナリファイルを読み込もうとしましたが、結果を見つけるのに役立たなかった。
どのように情報を入力してくださいか。
ありがとうございます。
top
コマンドは、proc file systemのデータを使用してCPU使用率を計算します。 CPU使用量データを含む実際のファイルは、プラットフォームによって異なる場合があります。たとえば、Linuxの場合は/proc/<pid>/stat
、Solarisの場合は/proc/<pid>/psinfo
にあります。 CPU使用率は、プロセスの累積CPU時間の差を、更新の間に測定された時間で割ったものとして計算されます。
Linuxの場合、あなたはhttp://procps.sourceforge.netからprocpsps
、top
を含むソース、および他のプロセスツールを検査することができます。特にreadproc.cファイルには、データを取得するための機能が含まれています。
Solarisの場合、あなたはhttps://hg.java.net/hg/solaris~on-src/file/tip/usr/src/lib/libprocからlibprocソースを検査することができます。 prog_get_info.cファイルには、データを取得して構造体psinfo_t
に格納する機能が含まれています。
machine
ディレクトリ内のプラットフォーム固有のソースファイルには、データを取得するための機能が含まれています。
更新
プロセスのCPU時間を取得するための別のオプション(Solarisのみ)はioctl()
システムコールにPIOCPSINFO
またはPIOCSTATUS
オプションに渡すことができます。 PIOCPSINFO
オプションは、prpsinfo_t
構造体内のさまざまなプロセス情報を返します。 PIOCSTATUS
オプションは、prstatus_t
構造体のプロセスのステータス情報を返します。
int main(int argc, char* argv[])
{
int fd;
prpsinfo_t info;
prstatus_t status;
char procbuf[50];
sprintf(procbuf, "/proc/%d", getpid());
fd = open(procbuf, O_RDONLY);
ioctl(fd, PIOCPSINFO, &info);
printf("Process user+sys time = %ld sec %ld nsec\n"
"Reaped children user+sys time = %ld sec %ld nsec\n",
info.pr_time.tv_sec, info.pr_time.tv_nsec,
info.pr_ctime.tv_sec, info.pr_ctime.tv_nsec);
ioctl(fd, PIOCSTATUS, &status);
printf("Process user+sys time = %ld sec %ld nsec\n"
"Sum of children's user+sys time = %ld sec %ld nsec\n",
status.pr_utime.tv_sec+status.pr_stime.tv_sec,
status.pr_utime.tv_nsec+status.pr_stime.tv_nsec,
status.pr_cutime.tv_sec+status.pr_cstime.tv_sec,
status.pr_cutime.tv_nsec+status.pr_cstime.tv_nsec);
close(fd);
exit(0);
}
注:このコードは未検証であり、簡略化のためにエラーチェックを省略http://getthegood.com/TechNotes/Papers/ProcStatistics.htmlでコード例から採用
。
ありがとう。私はpsinfoが以前私のために動かなかったけれども、あなたから与えられたすべてのオプションをチェックしています。 – Arunmu
重複していませんが関連しています - http://stackoverflow.com/questions/552976/top-commands-cpu-usage-calculation – DumbCoder