我尝试从中读取有关流程的信息/进程/就像 htop 和 top 一样。
htop 或 top 中“CPU%”的值似乎是通过对进程的 stat 文件中的 utime 和 stime 值求和,在一定时间后重复该值,并将差值除以经过的时间来计算的。由于精度通常看起来为 10 毫秒(getconf CLK_TCK 返回 100),因此我认为您必须等待至少一秒钟才能获得三位数的精度。
但是,htop 和 top 会立即使用“CPU%”值显示其进程。
他们使用了某种技巧还是我在这里犯了错误?
我当前的(C++)实现支持我的主张,看起来像这样:
// acquire initial
std::this_thread::sleep_for(measuringPeriod);
// acquire final
static const long CLK_TCK = sysconf(_SC_CLK_TCK);
long unsigned int initialTime = initial.utime + initial.stime;
long unsigned int finalTime = final.utime + final.stime;
long unsigned int time = finalTime - initialTime;
double measuringTime = (double)(std::chrono::duration_cast
<std::chrono::milliseconds>(measuringPeriod)
.count()) / 1000.0; // in seconds
double cpuLoad = (double)time * 100.0 / (double)CLK_TCK
/ measuringTime; // in percent