1. 程式人生 > >Linux下計算進程的CPU占用和內存占用的編程方法zz

Linux下計算進程的CPU占用和內存占用的編程方法zz

fop sscanf char 相關 sprint pos assert 文件中 href

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\n", 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====\n", 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====\n", 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\n====",occupy); return occupy; }

Linux下計算進程的CPU占用和內存占用的編程方法zz