Windows下用C语言获取进程cpu使用率,内存使用,IO情况
#ifndef PROCESS_STAT_H #define PROCESS_STAT_H #ifdef __cplusplus extern “C” { #endif typedef 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 Task Manager) // we may call this function on a process that has just exited but we 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 #include int 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做的应用之间的隔离,以下是关于百度架构师许立 ...
随机推荐
- 从Select语句看Oracle查询原理(了解Oracle的查询机制)
第一步:客户端把语句发给服务器端执行 当我们在客户端执行select语句时,客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle客户端是不会做任何的操作,他的主 ...
- 访问快递100的rest的请求
转:http://blog.csdn.net/u011115507/article/details/9172679 查快递的时候发现了一个http://www.kaidi100.com 是金蝶旗下的下 ...
- jquery find选择器在不同浏览器下的差异
初步测试,5000个节点的隐藏. 代码如下: <!doctype html> <html lang="en"> <head> <scrip ...
- c#中使用ABCpdf处理PDF
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- HTML5和CSS3:游戏的变革Flexbox
HTML5和CSS3给网络开发者提供了新的语法标签,本地动画工具,服务器端字体等等新增功能,这些并不是结束.开发者正苦于为网页设计挖出一条战壕 - 真正的页面排版工具,事实上,即便是最有前途的CSS3 ...
- 支持mdev的init脚本片断
mount -t tmpfs mdev /dev mount -t sysfs sysfs /sys mkdir /dev/pts mount -t devpts devpts /dev/pts ec ...
- jquery 工作空间注册
在一些面向对象的语言中有命名空间的概念,好处就是把不同的类放在不同的文件夹下面,这样就不会发生命名冲突,当然命名空间还有其他的作用. 在这里我们讨论的是在JS中怎么使用命名空间.当然JS并没有提供原生 ...
- jquery 与其他库冲突解决方案
var j = jQuery.noConflict(); j("div p").hide(); // 基于 jQuery 的代码 $("content").st ...
- Automatically watermark all uploaded photos (给所有上传的相片加水印)
Hello, This mod automatically watermark all uploaded photos. Price: FREE, enjoy. You will have to ed ...
- jquery图片上传
总结两个图片上传的方法: 一:使用jquery.form中的ajaxSubmit来实现上传. <script src="~/JavaScript/jquery-1.10.2.min.j ...