21xrx.com
2025-04-03 14:42:37 Thursday
文章检索 我的文章 写文章
Linux C++实现获取当前进程CPU使用率和内存占用
2023-06-27 18:27:15 深夜i     214     0
Linux C++ CPU使用率 内存占用 实现

Linux是一款开源的操作系统,因为其高度的可定制性与灵活性,在云计算、大数据等领域广泛应用。C++是一种高效的编程语言,在工程领域使用广泛。本文将介绍如何利用Linux系统以及C++编程语言实现获取当前进程CPU使用率和内存占用率的功能。

获取当前进程CPU使用率

通过Linux系统提供的/proc文件系统中的stat文件,可以获取到当前进程的CPU时间信息,包括用户态、内核态、开始时间、运行时间等。结合程序启动时的CPU时间戳,可以计算出进程的CPU使用率。具体的计算公式如下:

CPU使用率 = 100 * (进程当前总CPU时间 - 进程启动时CPU时间) / (系统总CPU时间 - 系统启动时CPU时间)

以下为C++示例代码:

#include <iostream>
#include <fstream>
#include <unistd.h>
double getCpuUsage() {
  unsigned long long upTime, sysUptime, userTime, sysTime, idleTime;
  std::ifstream stat("/proc/stat");
  stat.ignore(5); // Skip "cpu" identifier
  stat >> userTime >> sysTime >> idleTime;
  upTime = userTime + sysTime + idleTime;
  stat.close();
  double cpuUsage = 0.0;
  static unsigned long long lastUpdate = 0, lastTotal = 0;
  unsigned long long currentTime = upTime, currentTotal = userTime + sysTime;
  if (lastUpdate != 0) {
    unsigned long long timeDelta = currentTime - lastUpdate;
    unsigned long long totalDelta = currentTotal - lastTotal;
    cpuUsage = (double) totalDelta / timeDelta;
  }
  lastUpdate = currentTime;
  lastTotal = currentTotal;
  return cpuUsage * 100.0;
}
int main() {
  while (true) {
    std::cout << "CPU Usage: " << getCpuUsage() << "%" << std::endl;
    sleep(1);
  }
  return 0;
}

上述代码中,getCpuUsage()函数通过读取/proc/stat文件中的CPU信息计算当前进程的CPU使用率。lastUpdate和lastTotal变量分别用于保存上一次计算时的时间戳和CPU总时间,以便计算出当前进程的CPU使用率。

获取当前进程内存占用

通过读取/proc/self/statm文件,可以获取到当前进程的内存占用,其中第一列为占用物理内存的页数,第二列为占用虚拟内存的页数,一个页的大小为4KB。可以根据进程的页数和页大小计算出当前进程内存占用的大小。具体的计算公式如下:

内存占用 = 物理内存页数 * 4KB

以下为C++示例代码:

#include <iostream>
#include <fstream>
#include <unistd.h>
unsigned int getMemoryUsage() {
  std::ifstream statm("/proc/self/statm");
  unsigned int physicalMem = 0;
  statm >> physicalMem;
  statm.close();
  return physicalMem * 4;
}
int main() {
  while (true) {
    std::cout << "Memory Usage: " << getMemoryUsage() << "KB" << std::endl;
    sleep(1);
  }
  return 0;
}

上述代码中,getMemoryUsage()函数通过读取/proc/self/statm文件中的内存信息计算当前进程的内存占用。通过读取文件中第一列的数据,可以获取物理内存的页数,再通过将页数乘以4KB,即可计算出当前进程的内存占用大小。

总结

本文简要介绍了如何利用Linux系统以及C++编程语言实现获取当前进程CPU使用率和内存占用率的功能。通过读取/proc目录下的相关文件,可以获取到进程的CPU时间信息和内存占用信息,可用于诊断和监控程序的性能。

  
  

评论区