实例如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <string.h>
#include <stdlib.h>#define VMRSS_LINE 17
#define VMSIZE_LINE 13
#define PROCESS_ITEM 14typedef struct {unsigned long user;unsigned long nice;unsigned long system;unsigned long idle;
}Total_Cpu_Occupy_t;typedef struct {unsigned int pid;unsigned long utime;  //user timeunsigned long stime;  //kernel timeunsigned long cutime; //all user timeunsigned long cstime; //all dead time
}Proc_Cpu_Occupy_t;//获取第N项开始的指针
const char* get_items(const char*buffer ,unsigned int item){const char *p =buffer;int len = strlen(buffer);int count = 0;for (int i=0; i<len;i++){if (' ' == *p){count ++;if(count == item -1){p++;break;}}p++;}return p;
}//获取总的CPU时间
unsigned long get_cpu_total_occupy(){FILE *fd;char buff[1024]={0};Total_Cpu_Occupy_t t;fd =fopen("/proc/stat","r");if (nullptr == fd){return 0;}fgets(buff,sizeof(buff),fd);char name[64]={0};sscanf(buff,"%s %ld %ld %ld %ld",name,&t.user,&t.nice,&t.system,&t.idle);fclose(fd);return (t.user + t.nice + t.system + t.idle);
}//获取进程的CPU时间
unsigned long get_cpu_proc_occupy(unsigned int pid){char file_name[64]={0};Proc_Cpu_Occupy_t t;FILE *fd;char line_buff[1024]={0};sprintf(file_name,"/proc/%d/stat",pid);fd = fopen(file_name,"r");if(nullptr == fd){return 0;}fgets(line_buff,sizeof(line_buff),fd);sscanf(line_buff,"%u",&t.pid);const char *q =get_items(line_buff,PROCESS_ITEM);sscanf(q,"%ld %ld %ld %ld",&t.utime,&t.stime,&t.cutime,&t.cstime);fclose(fd);return (t.utime + t.stime + t.cutime + t.cstime);
}//获取CPU占用率
float get_proc_cpu(unsigned int pid){unsigned long totalcputime1,totalcputime2;unsigned long procputime1,procputime2;totalcputime1=get_cpu_total_occupy();procputime1=get_cpu_proc_occupy(pid);usleep(200000);totalcputime2=get_cpu_total_occupy();procputime2=get_cpu_proc_occupy(pid);float pcpu = 0.0;if(0 != totalcputime2-totalcputime1){ pcpu=100.0 * (procputime2-procputime1)/(totalcputime2-totalcputime1);}return pcpu;
}//获取进程占用内存
unsigned int get_proc_mem(unsigned int pid){char file_name[64]={0};FILE *fd;char line_buff[512]={0};sprintf(file_name,"/proc/%d/status",pid);fd =fopen(file_name,"r");if(nullptr == fd){return 0;}char name[64];int vmrss;for (int i=0; i<VMRSS_LINE-1;i++){fgets(line_buff,sizeof(line_buff),fd);}fgets(line_buff,sizeof(line_buff),fd);sscanf(line_buff,"%s %d",name,&vmrss);fclose(fd);return vmrss;
}//获取进程占用虚拟内存
unsigned int get_proc_virtualmem(unsigned int pid){char file_name[64]={0};FILE *fd;char line_buff[512]={0};sprintf(file_name,"/proc/%d/status",pid);fd =fopen(file_name,"r");if(nullptr == fd){return 0;}char name[64];int vmsize;for (int i=0; i<VMSIZE_LINE-1;i++){fgets(line_buff,sizeof(line_buff),fd);}fgets(line_buff,sizeof(line_buff),fd);sscanf(line_buff,"%s %d",name,&vmsize);fclose(fd);return vmsize;
}//进程本身
int get_pid(const char* process_name, const char* user = nullptr)
{if(user == nullptr){user = getlogin();  }char cmd[512];if (user){sprintf(cmd, "pgrep %s -u %s", process_name, user);  }FILE *pstr = popen(cmd,"r");    if(pstr == nullptr){return 0; }char buff[512];::memset(buff, 0, sizeof(buff));if(NULL == fgets(buff, 512, pstr)){return 0;}return atoi(buff);
}int main(int argc, char *argv[])
{if(argc < 2){printf("Usage:test <process_name> [user]\n");return 1;}unsigned int pid=0;if(argc > 2){pid = get_pid(argv[1],argv[2]);}else{pid = get_pid(argv[1]);}printf("pid=%d\n",pid);printf("pcpu=%f\n",get_proc_cpu(pid));printf("procmem=%d\n",get_proc_mem(pid));printf("virtualmem=%d\n",get_proc_virtualmem(pid));    return 0;
}

linux c 获取进程 cpu占用率 内存占用情况相关推荐

  1. 获取进程CPU占用率

    获取进程CPU占用率 // 时间转换 static __int64 file_time_2_utc(const FILETIME* ftime) {LARGE_INTEGER li;li.LowPar ...

  2. Linux服务器如何查看CPU使用率、内存占用情况

    作为Linux运维工程师系统维护过程中,需要我们经常查看服务器CPU使用率.内存使用率.带宽占用,从资源使用的程度分析系统整体的运行情况. 在 Linux 香港服务器上查看资源使用情况有很多命令可以参 ...

  3. hint ksql oracle_性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增

    你的位置: 问答吧 -> Oracle -> 问题详情 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增 每天都会报以下信息(alert.log): CJ ...

  4. java获得某进程CPU占用率

    昨天碰到一个问题,用java根据进程号获得该进程的CPU占用率. 在网上找了很多例子,都是用一个sigar.jar包去做的,下载下来以后,根据示例代码,发现获得的进程CPU占用率都是0.0,不知何故. ...

  5. kernel_task 进程 CPU 占用率高导致 mac 卡顿问题

    kernel_task 进程 CPU 占用率高导致 mac 卡顿问题 问题 这个问题已经遇到多次了,在 mac 使用中会突然变得非常卡顿,查看活动监视器发现 kernel_task 进程 cpu 占用 ...

  6. windows服务器system进程cpu占用率高解决方案(ntoskrnl.exe)

    之前给客户服务器部署过服务器监控程序,今天收到邮件告警提醒CPU过高,进入监控发现System进程突然升高,这个是系统进程,只查看进程cpu占用率没用,需要去查看System进程里的线程,具体是由那个 ...

  7. Linux VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本

    Linux VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本 288月2011 0 主要用于监控 linux 服务器负载及内存占用,如 MySQl.php-fpm,当负载或内存占 ...

  8. Shell脚本和Python查看Nginx并发连接数、进程数和常驻内存占用情况

    Shell脚本查看Nginx并发连接数.进程数和常驻内存占用情况 http://xiaoyongxing1.blog.163.com/blog/static/642807522015144302240 ...

  9. Linux服务器如何查看CPU占用率、内存占用、带宽占用

    CPU占用率查看命令:top 图中红色部分即为占用百分率,下面是每个进程的CPU占用率,如果服务器是多核CPU可能在下方看到有些进程CPU占用超过100%,这种一般是该进程使用了多核. 内存占用率:f ...

最新文章

  1. 精准广告系统架构调研
  2. WWDC上这个神级功能,一言不合又要改变未来购物趋势
  3. iOS10 UI教程视图的生命周期
  4. 习题2.5 两个有序链表序列的合并 (15 分)
  5. exe的dll加载过程
  6. kubeadm部署k8s_用 kubeadm 部署生产级 k8s 集群
  7. DP专练2 (大理石 + [ZJOI 2010]数字计数)
  8. 约束流–没有Drools规则语言的现代Java约束
  9. mysql崩溃_mysql崩溃原因分析
  10. Java字符串格式化记录
  11. idea 阿里巴巴规范插件_阿里巴巴 Java 开发者手册,编码事半功倍
  12. stm32的rxcallback再debug界面显示没有编译,uC/OS-III
  13. Java从json串中获取某个值
  14. tumblr android app,6 Best Tumblr Apps for Android and iOS (2018)
  15. php转html为pdf后部分图片无法显示
  16. c语言rst关系,为什么服务器突然回复RST——小心网络中的安全设备
  17. 支付沙箱环境测试和验签
  18. php获取汉字的首字母,PHP获取汉字的首字母
  19. 捕捉95%的习惯思维,让用户对你的产品上瘾
  20. 红米note7主板电路图_红米Note7Pro手机主板故障案例解析

热门文章

  1. FD.io/VPP — IPSec
  2. DPDK — PMD,DPDK 的核心优化
  3. 微信生成带参数的二维码,合成海报,扫码后推送小程序?
  4. ASP.NET MVC之从控制器传递数据到视图四种方式(一)
  5. window系统安装redis步骤
  6. Less和Sass的使用
  7. python实践3:cursor() — 数据库连接操作
  8. DELPHI FMX 获取系统版本 ANDROID IOS通用
  9. C# typeof Gettype is as 拆箱 装箱
  10. C#中Delegate和Event以及它们的区别(转载)