c++ - 如何确定 Linux 上的当前 CPU 使用率,最好使用 C++?

标签 c++ linux cpu-usage

我试过使用这个程序(改编自 this SO answer ):

// First segment (down to L49) is from SO https://stackoverflow.com/a/26930298/1876983
#include "stdlib.h"
#include "stdio.h"
#include "string.h"

using namespace std;

static unsigned long long lastTotalUser, lastTotalUserLow, lastTotalSys, lastTotalIdle;

void init(){
    FILE* file = fopen("/proc/stat", "r");
    fscanf(file, "cpu %llu %llu %llu %llu", &lastTotalUser, &lastTotalUserLow,
        &lastTotalSys, &lastTotalIdle);
    fclose(file);
}

double getCurrentValue(){
    double percent;
    FILE* file;
    unsigned long long totalUser, totalUserLow, totalSys, totalIdle, total;

    file = fopen("/proc/stat", "r");
    fscanf(file, "cpu %llu %llu %llu %llu", &totalUser, &totalUserLow,
        &totalSys, &totalIdle);
    fclose(file);

    if (totalUser < lastTotalUser || totalUserLow < lastTotalUserLow ||
        totalSys < lastTotalSys || totalIdle < lastTotalIdle){
        //Overflow detection. Just skip this value.
        percent = -1.0;
    }
    else{
        total = (totalUser - lastTotalUser) + (totalUserLow - lastTotalUserLow) +
            (totalSys - lastTotalSys);
        percent = total;
        total += (totalIdle - lastTotalIdle);
        percent /= total;
        percent *= 100;
    }

    lastTotalUser = totalUser;
    lastTotalUserLow = totalUserLow;
    lastTotalSys = totalSys;
    lastTotalIdle = totalIdle;

    return percent;
}

int main() {
    double CPU = getCurrentValue();
    printf("%.2f", CPU);

    return 0;
}

要确定 Linux 上的 当前 总 CPU 使用率,但它似乎要确定 平均 总 CPU 使用率。目前 KDE CPU 监视器告诉我我的 CPU 使用率只有 17% 而这个程序告诉我它是 60.19%。今天早些时候,我使用 Portage 包管理器编译了一堆软件,因此 60.19% 似乎更准确地代表了我打开这台 PC 后的 平均 CPU 使用率。自从我停止编译软件以来,这个 CPU 使用率数字一直在下降,进一步支持了这个观点,这是 平均 CPU 使用率,而不是当前 CPU 使用率。

最佳答案

一种方法是使用 exec C++ 中的函数执行任何相关的 Linux 命令以获取这些值。您可以使用 > 运算符执行 topuptime 等 Linux 命令。
例如:uptime > output.txt 之后可以读取output.txt文件。

关于c++ - 如何确定 Linux 上的当前 CPU 使用率,最好使用 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44093078/

相关文章:

ios - iPhone游戏的CPU使用率..这是一个好的值吗?

python - 为什么我的程序使用系统 cpu 时间?

c++ - 在 C++ 中访问 Lua 函数的返回值,反之亦然

linux - 如何从另一台机器连接到Oracle数据库?

c++ - db_query 线程安全吗?

linux - 从 bash 脚本设置 crontab

java - 在 Linux 上生成 cab 文件

java cpu使用监控

c++ - Qt creator 在发布 qmake 时出错

c++ - 当 C++ 线程退出时,内存是否保持分配状态?