21xrx.com
2024-11-10 00:46:53 Sunday
登录
文章检索 我的文章 写文章
Linux C++实现获取当前进程CPU使用率和内存占用
2023-06-27 18:27:15 深夜i     --     --
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时间信息和内存占用信息,可用于诊断和监控程序的性能。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复