Eu tentei ler informações sobre processos de / proc / como htop e top fazer.
Parece que o valor para "CPU%" em htop ou top é calculado pela soma dos valores utime e stime no arquivo stat de um processo, repetindo depois de um certo tempo e dividindo a diferença pelo tempo passado . Como a precisão geralmente parece ser de 10 ms (getconf CLK_TCK retorna 100), imagino que você tenha que esperar pelo menos um segundo para obter uma precisão de três dígitos.
No entanto, htop e top mostram seus processos com os valores "CPU%" imediatamente.
Eles usam algum tipo de truque ou estou cometendo um erro aqui?
Minha implementação atual (C ++) que faz backup da minha reivindicação é semelhante a esta:
// 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