我试图用C获得%CPU利用率。我已经看到了这个解决方案:How to get the CPU Usage in C?
因此我尝试了那里提供的帮助:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/times.h>
#include <unistd.h>
#define NANO2SEC 1000000000
struct timespec gettimenow;
double getWtime;
double getCtick;
int ncore;
double cpu_util;
double get_wall_time () {
if (clock_gettime(CLOCK_REALTIME,&gettimenow)){
//error handle
return 0;
}
return ( (double)gettimenow.tv_sec + ( (double)gettimenow.tv_nsec / NANO2SEC ) );
}
double get_cpu_time () {
return ( (double)clock() / sysconf (_SC_CLK_TCK));
}
int core_logical () {
return (sysconf(_SC_NPROCESSORS_ONLN));
}
void main() {
getWtime = get_wall_time ();
printf("\nWall time : %f \n", getWtime);
getCtick = get_cpu_time ();
printf("\nCPU time : %f \n", getCtick);
ncore = core_logical ();
printf("\nNo of cores : %d \n", ncore);
cpu_util = (getCtick/ncore/getWtime);
printf("\nCPU Utilization : %f %% \n", cpu_util);
}
o / p:
壁垒时间:1439132892.054816
CPU时间:17.280000
内核数量:2
CPU利用率:0.000000%
但是使用top命令我发现cpu利用率根本不是0%,而是更多。即。 6.2% 我想知道当前使用的CPU百分比。
答案 0 :(得分:2)
你的程序正在做什么没有任何意义。
你将clock()
除以当前进程使用的CPU时间,除以1970年以来的秒数。当然,这并没有给你一个有意义的答案!
如果您想获得系统的当前CPU使用率,则需要使用/proc/uptime
提供的数据。读取时,此文件返回两个数字,表示系统运行的秒数,以及它空闲的秒数。因此,要查找当前的CPU使用情况:
打开并阅读文件并保存您获得的两个号码。我们称他们为uptime1
和idle1
。关闭它。
等一下。
再次打开并阅读该文件;将数字保存为uptime2
和idle2
。
超过该秒的CPU使用率为100 - 100 * (idle2 - idle1) / (uptime2 - uptime1)
%。