使用C++获取和监控Linux系统CPU使用率
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cstdlib>
#include <cstdio>
struct ProcessInfo1 {
std::string USER;
int PID;
float CPU;
float MEM;
int VSZ;
int RSS;
std::string TTY;
std::string STAT;
std::string START;
std::string TIME;
std::string COMMAND;
};
// 获取CPU使用率排名前几的进程信息
std::vector<ProcessInfo1> getTopProcesses_CPU(const int &numProcesses) {
std::vector<ProcessInfo1> result;
// 构建命令来获取前几个占用CPU和内存的进程
std::string cmd = 'ps aux --sort=-%cpu,-%mem | head -n ' + std::to_string(numProcesses + 1);
// 使用popen执行命令并读取输出
FILE *pipe = popen(cmd.c_str(), 'r');
if (!pipe) {
std::cerr << 'Failed to run command' << std::endl;
return result;
}
char buffer[1024];
fgets(buffer, sizeof(buffer), pipe); // 读取并忽略标题行
while (fgets(buffer, sizeof(buffer), pipe) != NULL) {
ProcessInfo1 info;
std::stringstream ss(buffer);
ss >> info.USER >> info.PID >> info.CPU >> info.MEM >> info.VSZ >> info.RSS >> info.TTY >> info.STAT >> info.START >> info.TIME;
getline(ss, info.COMMAND); // 读取命令行剩余部分
result.push_back(info);
}
pclose(pipe);
return result;
}
int main() {
// 获取CPU使用率排名前5的进程
std::vector<ProcessInfo1> topProcesses = getTopProcesses_CPU(5);
// 打印进程信息
for (const auto &process : topProcesses) {
std::cout << 'USER: ' << process.USER << ', ';
std::cout << 'PID: ' << process.PID << ', ';
std::cout << 'CPU: ' << process.CPU << '%, ';
std::cout << 'MEM: ' << process.MEM << '%, ';
std::cout << 'COMMAND: ' << process.COMMAND << std::endl;
}
return 0;
}
代码说明:
ProcessInfo1结构体用于存储进程信息,包括用户名、进程ID、CPU使用率、内存使用率等。getTopProcesses_CPU函数接受一个整数参数numProcesses,表示要获取的进程数量。- 函数内部使用
ps aux --sort=-%cpu,-%mem | head -n命令获取CPU使用率排名前numProcesses + 1的进程信息。 - 使用
popen函数执行命令并获取输出。 - 使用
fgets函数逐行读取输出,并使用stringstream解析每一行的信息,存储到ProcessInfo1结构体中。 - 最后将所有进程信息存储到
std::vector中并返回。
使用方法:
- 将代码保存为
.cpp文件,例如cpu_monitor.cpp。 - 使用C++编译器编译代码:
g++ cpu_monitor.cpp -o cpu_monitor - 运行程序:
./cpu_monitor
程序将打印CPU使用率排名前5的进程信息,包括用户名、进程ID、CPU使用率、内存使用率和命令。
注意:
- 该代码示例仅获取CPU使用率排名前几的进程信息,如果需要获取所有进程信息,需要修改代码。
- 该代码示例仅适用于Linux系统,不适用于其他操作系统。
- 使用
popen函数执行命令时,需要确保命令的安全性,避免潜在的安全风险。
希望这段代码可以帮助您监控Linux系统的CPU使用率。
原文地址: https://www.cveoy.top/t/topic/FHi 著作权归作者所有。请勿转载和采集!