获取单个进程的cpu占用率
时间: 2023-08-03 14:07:37 浏览: 155
要获取单个进程的 CPU 占用率,可以通过读取 /proc/[pid]/stat 文件来获取进程的 CPU 时间信息,然后计算出 CPU 占用率。
具体步骤如下:
1. 打开 /proc/[pid]/stat 文件,其中 [pid] 是进程 ID。
```c++
#include <fstream>
std::ifstream stat_file("/proc/[pid]/stat");
if (!stat_file) {
// 打开失败
}
```
2. 从文件中读取第 14 到第 17 个字段,分别表示进程在用户态和内核态运行的 CPU 时间。
```c++
#include <sstream>
#include <string>
std::string line;
std::getline(stat_file, line);
std::istringstream iss(line);
std::string dummy;
unsigned long utime, stime;
for (int i = 1; i <= 13; i++) {
iss >> dummy;
}
iss >> utime >> stime;
```
3. 计算进程的 CPU 时间总和。
```c++
unsigned long total_time = utime + stime;
```
4. 获取系统的 CPU 时间总和。
```c++
#include <unistd.h>
unsigned long hz = sysconf(_SC_CLK_TCK);
unsigned long uptime;
std::ifstream uptime_file("/proc/uptime");
if (!uptime_file) {
// 打开失败
}
uptime_file >> uptime;
unsigned long total_time_system = uptime * hz;
```
其中,_SC_CLK_TCK 表示每秒钟的时钟滴答数,即 HZ 值。
5. 计算 CPU 占用率。
```c++
double cpu_usage = 100.0 * total_time / total_time_system;
```
需要注意的是,这种方式只能获取到单个进程的 CPU 占用率,如果要获取系统整体的 CPU 占用率,需要使用其他方式。
阅读全文
相关推荐


















