合計CPU計算のためにStackOverflowでこの答えを見つけました。使用法:https://stackoverflow.com/questions/1420426/calculate-cpu-usage-of-a-process-in-linux/4497769#4497769
しかし、利用可能な合計CPUサイクルの割合でこれをどのように計算しますか?私は他のプロセスを作成する必要なしにシステムコールとファイルのみを使用してこれを実行したいと思います。
total
この数字は提供された情報の属性にすぎないと思いますglibtop_cpu
(そうですが、user + nice + sys + idle
実際には時間の経過とともに変わります)。
時間が経つにつれて周期が自然に変わるからかもしれないと思いましたが、この場合なぜ他の数字を報告するのでしょうかtop
。 Firefox で新しいタブを作成してページを読み込むと、top
Firefox はコアの約 35% を使用して数秒間表示されますが、次のコードでは一貫した 7.24% しか表示されません。
#include <stdio.h>
#include <time.h>
#include <glibtop/cpu.h>
#include <unistd.h>
float // Get CPU usge as a decimal percentage.
get_cpu(glibtop_cpu *cpustruct) {
glibtop_get_cpu(cpustruct);
return 100 - (float)cpustruct->idle / (float)cpustruct->total * 100;
}
int
main(void) {
glibtop_cpu cpustruct;
unsigned int sleepfor = 5000;
float usage;
for(;;usleep(sleepfor)) {
usage = get_cpu(&cpustruct);
printf("%.2f\n", usage);
}
exit(0);
}
ベストアンサー1
アップデート1
time
このコマンドをプログラムに統合することを検討できます。ソースはここ。デフォルトのcファイル(time.c
)はわずか20kbです。
オリジナル
おそらく望むものではありませんが、「怠惰な」方法は、次time
のコマンドを使用することです。
time firefox
Firefox を閉じると、次のメッセージが表示されます。
~$ time firefox
NOTE: child process received `Goodbye', closing down
real 3m16.070s
user 0m17.329s
sys 0m17.045s
「NOTE:」行を印刷してくださいfirefox
。
時間は、real
プログラムの実行にかかる時間です。
そして使用されたCPU時間user
です。sys