linux中的cpu idle,linux下如何获得系统信息,比如cpu占用率
RT
谢谢
|
#define SET_IF_DESIRED(x,y) if(x) *(x) = (y)
#define _ULL unsigned long long
int FiveCpuNumbers(_ULL *uret,_ULL *nret,_ULL *sret,_ULL *iret,_ULL *iowait)
{
static _ULL u = 0, m = 0, s = 0, i = 0, iw = 0;
_ULL user_j, nice_j, sys_j, idle_j, iowait_j = 0;
FILE *fp;
size_t byte_read;
char buffer[100];
fp = fopen("/proc/stat", "r");
byte_read = fread(buffer, 1, sizeof(buffer)-1, fp);
fclose(fp);
if (byte_read==0 || byte_read==sizeof(buffer))
return -1;
buffer[byte_read] = '';
sscanf(buffer, "cpu %Lu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &idle_j, &iowait_j);
SET_IF_DESIRED(uret, user_j - u);
SET_IF_DESIRED(nret, nice_j - m);
SET_IF_DESIRED(sret, sys_j - s);
/* Idle can go backwards one tick due to kernel calculation issues */
SET_IF_DESIRED(iret, (idle_j > i) ? (idle_j - i) : 0);
SET_IF_DESIRED(iowait, iowait_j - iw);
u = user_j;
m = nice_j;
s = sys_j;
i = idle_j;
iw = iowait_j;
//printf("cpu %Lu %Lu %Lu %Lu %Lu n",user_j,nice_j,sys_j,idle_j,iowait_j);
return 0;
}
/*
* get the cpu usage
*/
int ReadCpuInfo(float &fCpuUsage)
{
float cpu_usage;
_ULL user_j, nice_j, sys_j, idle_j, iowait_j = 0;
if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)
return -1;
usleep(500000);
if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)
return -1;
//usleep(500000);
//if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)
//return -1;
cpu_usage = (idle_j * 100.0) / (user_j + nice_j + sys_j + idle_j + iowait_j);
if (cpu_usage>100)
cpu_usage = 100.0;
/* change to useage */
cpu_usage = 100.0 - (cpu_usage);
fCpuUsage = cpu_usage;
printf("### CPU Usage : %0.3f %%n", cpu_usage);
return 0;
}
#undef _ULL
|
typedef struct ProcInfo
{
char name[MAX_PROC_NAME];/*process name*/
int PID; /*process id*/
int PPID; /*parent process id*/
int status; /* sleeping or running*/
struct ProcInfo * Next; /*pointer to next process struct*/
}* ProcList;
typedef struct netCards
{
char name[MAX_NET_CARD_NAME];/*net card name*/
int ByteRcv; /*bytes received*/
int ByteSnd; /*bytes sent*/
}* netCardList;
struct eCop_SM_Object
{
char OsName[MAX_OS_NAME];/*do not alarm*/
int CPU_Percent[MAX_CPUS];/*for example 34 means 0.34%*/
int DiskAvail; /*available disk*/
int MemUsed; /*memory used*/
/*including sending bytes and receiving bytes*/
struct netCards netCard[MAX_NET_CARDS];
struct ProcInfo * PrList;
/*
evaluate the time to it when sampling, if
it is -1,we consider it an invalid object
*/
long TimeStamp;
};
/*get os information and store it in a struct*/
int sample(struct eCop_SM_Object * obj);
|
在本论坛搜CPU。
|
top源代码里面machine目录下的m_linux.c里面有一个get_system_info的方法,可以获得内存,CPU,经过适当的的加工后,可以获得网络流量和磁盘空间,另外top还可一个获得进程列表
linux中的cpu idle,linux下如何获得系统信息,比如cpu占用率相关推荐
- linux中original_如何在 Linux 中整理磁盘碎片
如何在 Linux 中整理磁盘碎片 转载自: 如何在 Linux 中整理磁盘碎片linux.cn 有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀 ...
- 在linux中的sort命令,linux中sort命令
功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...
- linux中用户组和用户,linux中用户和用户组
一.用户和组原理 一个用户可以属于多个组,一个组有多个用户 在Linux中操作系统必须依赖组和用户进行管理 二.与用户和组相关的配置文件 1.组相关配置文件 1)/etc/group :管理用户组信息 ...
- 网页修改linux命令行,linux中文本修改操作命令linux网页制作 -电脑资料
在命令模式下可以使用 vi 提供的各种有关命令对文本进行修改,包括对文本内容的删除.复制.取代和替换等, 1. 文本删除/移动 在编辑文本时 ,经常需要删除一些不需要的文本,我们可以用键将输错或不需要 ...
- linux中文件链接,关于Linux中文件,链接的一些思考
在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...
- linux中make命令大全,Linux中的命令 make -f 是什么意思
二.Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为"GNUmakefile"."makef ile"."Make ...
- linux中运行.pro文件,Linux下pro*c运行配置
在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...
- linux中挂载系统光盘,linux下挂载光盘
Linux将每一个物理设备都映射成了一个文件,这些文件都放在了/dev文件(linux中目录也是文件)下面,光驱映射成的文件就是一个名为cdrom的文件.mount命令是挂载光驱的基本命令,其后可以跟 ...
- 搜索linux中大于m文件,linux 下查找大于100M的文件(转)
命令行如下 find . -type f -size +1000000k Linux系统下查找大文件或目录的技巧 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢 ...
- linux中grep命令查找目录下,linux中查找grep与find命令的使用
在日常工作中,我们常常会在自己的电脑寻找某些不知道放在哪里的私密文件,通常我们会在资源管理器的搜索栏里输入一些关键字去帮助我们快速去定位查找该文件.在linux系统中也有这样的功能,只不过在linux ...
最新文章
- java.util.date_关于java中java.util.Date(急)
- 给Jquery添加alert,prompt方法,类似系统的Alert,Prompt,可以响应键盘,支持拖动...
- Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
- 微信摇一摇插件ios_iOS实现微信摇一摇功能
- 动态卡片:富媒体内容井喷式增长下,新一代移动端动态研发的模式
- [Vue.js] 基础 -- Vue实例
- HttpServletRequest 需要导入xx包?
- 第四章 ASP.NET MVC HTML.ActionLink输出超链接的具体用法
- JAVA 正则表达式 (超详细) .
- 52.网络参数管理者: DHCP
- 敏捷开发之利刃—db4o
- java小程序(万年历)
- 酷狗社招面试 java_前端面试社招经验(网易,酷狗)
- 【行业案例分析】3C数码行业B2B供应链平台开发案例
- Python模块之Shapely
- 在任意文件夹下以管理员的身份运行powershell
- rdt(可靠运输协议)理解
- 医院PACS系统源码 PACS信息系统源码
- 关机或重新启动电脑勾选再次登录时重新打开窗口导致无法上网
- PX4使用手册-自主避障-ObstacleAvoidance
热门文章
- 阿普奇 E7系列 工控机——MinipiceCAN卡在送餐机器人中的应用
- 深入浅出 Vue 中的 key 值
- 导航需要测试些什么软件,自驾利器,三大导航软件对比测试
- matlab绘制环形彩色圆盘
- 嵌入式产品的研发流程
- kaldi timit 语音库在线解码应用
- 计量感知芯片HLW8112在泛电力物联网的核心应用
- PCA 回归算法matlab实现
- 计算机毕业设计之java+springboot基于vue的社区医院管理服务系统
- [书]操作系统真象还原 -- 第10章 控制台(信号量, 锁)、键盘(环形缓冲区))