C语言中的CPU使用率(以百分比表示)

如何使用 C 获取 CPU 使用率百分比?

我有一个函数:

static int cpu_usage (lua_State *L) {
    clock_t clock_now      = clock();
    double  cpu_percentage = ((double) (clock_now - program_start)) / get_cpus() / CLOCKS_PER_SEC;

    lua_pushnumber(L,cpu_percentage);
    return 1;
}

“program_start”是我程序启动时使用的一个 clock_t。

另一种尝试:

static int cpu_usage(lua_State *L) {
    struct rusage ru;
    getrusage(RUSAGE_SELF, &ru);

    lua_pushnumber(L,ru.ru_utime.tv_sec);
    return 1;
}

有没有办法测量 CPU 使用情况?如果我不断调用这个函数,它会不断返回不断增长的时间……但这不是我想要的。

附:我使用的是 Ubuntu。

谢谢!=)

点赞
用户1741542
用户1741542

你的函数应该按预期工作。来自 clock

clock() 函数应返回实现的最佳近似值,即自进程启动以来的 _处理器时间_,与与进程调用仅相关的实现定义纪元有关。

这意味着它返回此进程的 CPU 时间。


如果你想计算相对于墙钟时间的 CPU 时间,你必须使用 gettimeofday。在程序开始时保存时间

struct timeval wall_start;
gettimeofday(&wall_start, NULL);

当你想计算百分比时

struct timeval wall_now;
gettimeofday(&wall_now, NULL);

现在你可以计算墙钟时间的差异,得到

double start = wall_start.tv_sec + wall_start.tv_usec / 1000000;
double stop = wall_now.tv_sec + wall_now.tv_usec / 1000000;
double wall_time = stop - start;
double cpu_time = ...;
double percentage = cpu_time / wall_time;
2014-05-21 19:35:50