合計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
答え2
なぜなら、glibtop_get_cpu()
各カテゴリで使用された jiffies の総数を返すからです。システム起動後。また何ができますか?最後に電話したかどれくらいかわかりません。
しかし、あなたはできなければなりません。この数字がある通貨から次の通貨にどのように変化するかを測定する必要があります。計算できません現在の(例:1秒または0.5秒など)過去には、呼び出しを一度だけ使用できます。
睡眠時間に基づいて計算することもできますが、別のタイマーがある場合は、特に負荷がかかる場合はより正確です。