Windows下用C语言获取进程cpu使用率,内存使用,IO情况
#ifndef PROCESS_STAT_H#define PROCESS_STAT_H#ifdef __cplusplusextern “C” {#endiftypedef long long int64_t;typedef unsigned long long uint64_t;/// 获取当前进程的cpu使用率,返回-1失败int get_cpu_usage();/// 获取当前进程内存和虚拟内存使用量,返回-1失败,0成功int get_memory_usage(uint64_t* mem, uint64_t* vmem);/// 获取当前进程总共读和写的IO字节数,返回-1失败,0成功int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes);#ifdef __cplusplus}#endif#endif/*PROCESS_STAT_H*//*** 需要连接到psapi.lib*/#include#include #include#include “process_stat.h”/// 时间转换static uint64_t file_time_2_utc(const FILETIME* ftime){LARGE_INTEGER li;assert(ftime);li.LowPart = ftime->dwLowDateTime;li.HighPart = ftime->dwHighDateTime;return li.QuadPart;}/// 获得CPU的核数static int get_processor_number(){SYSTEM_INFO info;GetSystemInfo(&info);return (int)info.dwNumberOfProcessors;}int get_cpu_usage(){//cpu数量static int processor_count_ = -1;//上一次的时间static int64_t last_time_ = 0;static int64_t last_system_time_ = 0;FILETIME now;FILETIME creation_time;FILETIME exit_time;FILETIME kernel_time;FILETIME user_time;int64_t system_time;int64_t time;int64_t system_time_delta;int64_t time_delta;int cpu = -1;if(processor_count_ == -1){processor_count_ = get_processor_number();}GetSystemTimeAsFileTime(&now);if (!GetProcessTimes(GetCurrentProcess(), &creation_time, &exit_time,&kernel_time, &user_time)){// We don’t assert here because in some cases (such as in the TaskManager)// we may call this function on a process that has just exited butwe have// not yet received the notification.return -1;}system_time = (file_time_2_utc(&kernel_time) + file_time_2_utc(&user_time))processor_count_;time = file_time_2_utc(&now);if ((last_system_time_ == 0) || (last_time_ == 0)){// First call, just set the last values.last_system_time_ = system_time;last_time_ = time;return -1;}system_time_delta = system_time – last_system_time_;time_delta = time – last_time_;assert(time_delta != 0);if (time_delta == 0)return -1;// We add time_delta / 2 so the result is rounded.cpu = (int)((system_time_delta * 100 + time_delta / 2) / time_delta);last_system_time_ = system_time;last_time_ = time;return cpu;}int get_memory_usage(uint64_t* mem, uint64_t* vmem){PROCESS_MEMORY_COUNTERS pmc;if(GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))){if(mem) *mem = pmc.WorkingSetSize;if(vmem) *vmem = pmc.PagefileUsage;return 0;}return -1;}int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes){IO_COUNTERS io_counter;if(GetProcessIoCounters(GetCurrentProcess(), &io_counter)){if(read_bytes) *read_bytes = io_counter.ReadTransferCount;if(write_bytes) *write_bytes = io_counter.WriteTransferCount;return 0;}return -1;}#include “process_stat.h”#include#includeint main(){while(1){int cpu;uint64_t mem, vmem, r, w;cpu = get_cpu_usage();get_memory_usage(&mem, &vmem);get_io_bytes(&r, &w);printf(“CPU使用率: %u\n”,cpu);printf(“内存使用: %u 字节\n”, mem);printf(“虚拟内存使用: %u 字节\n”, vmem);printf(“总共读: %u 字节\n”, r);printf(“总共写: %u 字节\n”, w);Sleep(1000);}return 0;}
|
Windows下用C语言获取进程cpu使用率,内存使用,IO情况的更多相关文章
- linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定
背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况.一. linux ps命令,查看某进程cpu和内存占用率情况[root@test vhost]# ps auxUSER ...
- Java进程CPU使用率高排查
Java进程CPU使用率高排查 生产java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下.1.jps 获取Java进程的PID.2.jstack pid >> ...
- linux下的CPU、内存、IO、网络的压力测试
linux下的CPU.内存.IO.网络的压力测试 要远程测试其实很简单了,把结果放到一个微服务里直接在web里查看就可以了,或者同步到其他服务器上 一.对CPU进行简单测试: 1.通过bc命令计算特 ...
- [转帖]linux下的CPU、内存、IO、网络的压力测试
linux下的CPU.内存.IO.网络的压力测试 https://www.cnblogs.com/zhuochong/p/10185881.html 一.对CPU进行简单测试: 1.通过bc命令计算特 ...
- [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具
linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...
- 为Zabbix配置Nova服务、Keystone和Placement进程CPU和内存usage监控
目前已经完成了RabbitMQ和MySQL的监控项配置,还差对nova-api.nova-conductor.nova-scheduler和keystone进程CPU和内存 usage的监控,类似的轮 ...
- 查看进程CPU、内存使用情况
本文介绍通过ps和top查看进程的cpu.内存等使用情况. 1.ps命令 1.1 概览 ps命令相关参数定义: -e 或者-A,选择所有的进程: -L 显示线程: -o 自定义输出格式: 输出格式: ...
- Cgroups控制cpu,内存,io示例
Cgroups是control groups的缩写,最初由Google工程师提出,后来编进linux内核. Cgroups是实现IaaS虚拟化(kvm.lxc等),PaaS容器沙箱(Docker等)的 ...
- Cgroups控制cpu,内存,io示例【转】
本文转载自:https://www.cnblogs.com/yanghuahui/p/3751826.html 百度私有PaaS云就是使用轻量的cgoups做的应用之间的隔离,以下是关于百度架构师许立 ...
随机推荐
- iOS开发之四张图说明GCD(Grand Central Dispatch)附Test源码
首先,先介绍几个概念:GCD,队列,串行,并行,同步,异步. ...
- ADO.NET复习——自己编写SqlHelper类
今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...
- java常识和好玩的注释
如字符串使用strXXXboolean使用isXXX,hasXXX Vector vProducts= new Vector(); Array aryUsers= new Array(); 类与接口基 ...
- C++变量的“总分性”(Mereology)
Stroustrup 在自传中说自己在哲学上深受 Kierkegaard (吉爾凱高爾)的影响,而讨厌黑格尔.所以看 Stroustrup 的书,很少感受到抽象理论的重要性.这也影响了C++的文化:许 ...
- 前端自动化之babel本地化安装
npm添加package.json cd到项目根目录直接调用npm init 会创建package.json文件 本地安装bebel(并非全局安装,这种情况下cmd命令中babel命令不识别): 步骤 ...
- codevs 2152 滑雪
2152 滑雪 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场 ...
- COJ 0986 WZJ的数据结构(负十四) 区间动态k大
题解:哈哈哈我过了!!!主席树+树状数组写起来还真是hentai啊... 在这里必须分享我的一个沙茶错!!!看这段代码: void get(int x,int d){ ]=root[x];x;x-=x ...
- -_-#【React】
React Native 用于构建用户界面的JAVASCRIPT库 | ReactReact 入门实例教程颠覆式前端UI开发框架:Reactzhihu1zhihu2 React.js编程思想 < ...
- Qt入门(7)——QApplication类
QApplication类管理图形用户界面应用程序的控制流和主要设置.它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度.也用于处理应用程序的初始化和结束,并且提供对话管理.它也处理 ...
- JavaScript权威指南学习笔记4
今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...