c中的cpu利用率

时间:2015-08-09 15:18:21

标签: c linux

我试图用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百分比。

1 个答案:

答案 0 :(得分:2)

你的程序正在做什么没有任何意义。

你将clock()除以当前进程使用的CPU时间,除以1970年以来的秒数。当然,这并没有给你一个有意义的答案!

如果您想获得系统的当前CPU使用率,则需要使用/proc/uptime提供的数据。读取时,此文件返回两个数字,表示系统运行的秒数,以及它空闲的秒数。因此,要查找当前的CPU使用情况:

  1. 打开并阅读文件并保存您获得的两个号码。我们称他们为uptime1idle1。关闭它。

  2. 等一下。

  3. 再次打开并阅读该文件;将数字保存为uptime2idle2

  4. 超过该秒的CPU使用率为100 - 100 * (idle2 - idle1) / (uptime2 - uptime1)%。