Linux下计算进程的CPU占用和内存占用的编程方法zz

https://www.cnblogs.com/cxjchen/archive/2013/03/30/2990548.html

 查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。

进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>   //头文件
#include <assert.h>
int get_phy_mem(const pid_t p)
{
    char file[64] = {0};//文件名
  
    FILE *fd;         //定义文件指针fd
    char line_buff[256] = {0};  //读取行的缓冲区
    sprintf(file,"/proc/%d/status",p);//文件中第11行包含着

    fprintf (stderr, "current pid:%d
", p);                                                                                                  
    fd = fopen (file, "r"); //以R读的方式打开文件再赋给指针fd

    //获取vmrss:实际物理内存占用
    int i;
    char name[32];//存放项目名称
    int vmrss;//存放内存峰值大小
    for (i=0;i<VMRSS_LINE-1;i++)
    {
        fgets (line_buff, sizeof(line_buff), fd);
    }//读到第15行
    fgets (line_buff, sizeof(line_buff), fd);//读取VmRSS这一行的数据,VmRSS在第15行
    sscanf (line_buff, "%s %d", name,&vmrss);
    fprintf (stderr, "====%s:%d====
", name,vmrss);
    fclose(fd);     //关闭文件fd
    return vmrss;
}

int get_rmem(pid_t p)
{
    return get_phy_mem(p);
}


int get_total_mem()
{
    char* file = "/proc/meminfo";//文件名
  
    FILE *fd;         //定义文件指针fd
    char line_buff[256] = {0};  //读取行的缓冲区                                                                                                
    fd = fopen (file, "r"); //以R读的方式打开文件再赋给指针fd

    //获取memtotal:总内存占用大小
    int i;
    char name[32];//存放项目名称
    int memtotal;//存放内存峰值大小
    fgets (line_buff, sizeof(line_buff), fd);//读取memtotal这一行的数据,memtotal在第1行
    sscanf (line_buff, "%s %d", name,&memtotal);
    fprintf (stderr, "====%s:%d====
", name,memtotal);
    fclose(fd);     //关闭文件fd
    return memtotal;
}

float get_pmem(pid_t p)
{
    int phy = get_phy_mem(p);
      int total = get_total_mem();
      float occupy = (phy*1.0)/(total*1.0);
      fprintf(stderr,"====process mem occupy:%.6f
====",occupy);
      return occupy;
}


原文地址:https://www.cnblogs.com/soul-stone/p/8686329.html