• 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;
    }
    
    
  • 相关阅读:
    [Vue warn]: Error in render: "TypeError: Cannot read property '0' of undefined、vuejs路由使用的问题Error in render function
    web 实时通信的方法总结
    SVN相关
    Redis__WindowsServer主从服务部署及调用实例
    Sqlserver__数据表排序记录和界面显示排序记录不一致的问题
    redis_常见问题
    redis_常用命令
    电商项目系列文档(二)
    redis配置文件redis.conf参数说明
    CMD_命令行
  • 原文地址:https://www.cnblogs.com/soul-stone/p/8686329.html
Copyright © 2020-2023  润新知