为什么htop启动这么快?

为什么htop启动这么快?

我尝试从中读取有关流程的信息/进程/就像 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

相关内容