Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等
#include "resource_minitor.h"
#include "sys/statfs.h"
resource_minitor::resource_minitor(QObject *parent) : QObject(parent)
{
connect(&monitor_timer__, &QTimer::timeout, this, &resource_minitor::get_resource__);
monitor_timer__.start(m_timer_interval__);
}
void resource_minitor::get_resource__()
{
get_cpu_usage__ ();
get_disk_speed__();
get_mem_usage__ ();
get_net_usage__ ();
get_disk_space__();
get_path_space("/");
qDebug()<<"\n";
}
bool resource_minitor::get_mem_usage__()
{
QProcess process;
process.start("free -m"); //使用free完成获取
process.waitForFinished();
process.readLine();
QString str = process.readLine();
str.replace("\n","");
str.replace(QRegExp("( ){1,}")," ");//将连续空格替换为单个空格 用于分割
auto lst = str.split(" ");
if(lst.size() > )
{
qDebug("mem total:%.0lfMB free:%.0lfMB",lst[].toDouble(),lst[].toDouble());
return true;
}
return false;
}
bool resource_minitor::get_net_usage__()
{
QProcess process;
process.start("cat /proc/net/dev"); //读取文件/proc/net/dev获取网络收发包数量,再除取样时间得到网络速度
process.waitForFinished();
process.readLine();
process.readLine();
while(!process.atEnd())
{
QString str = process.readLine();
str.replace("\n","");
str.replace(QRegExp("( ){1,}")," ");
auto lst = str.split(" ");
if(lst.size() > && lst[] == "enp2s0:")
{
double recv = ;
double send = ;
if(lst.size() > )
recv = lst[].toDouble();
if(lst.size() > )
send = lst[].toDouble();
qDebug("%s 接收速度:%.0lfbyte/s 发送速度:%.0lfbyte/s",lst[].toStdString().c_str(),(recv - m_recv_bytes__) / (m_timer_interval__ / 1000.0),(send - m_send_bytes__) / (m_timer_interval__ / 1000.0));
m_recv_bytes__ = recv;
m_send_bytes__ = send;
}
}
return true;
}
bool resource_minitor::get_cpu_usage__()
{
QProcess process;
process.start("cat /proc/stat");
process.waitForFinished();
QString str = process.readLine();
str.replace("\n","");
str.replace(QRegExp("( ){1,}")," ");
auto lst = str.split(" ");
if(lst.size() > )
{
double use = lst[].toDouble() + lst[].toDouble() + lst[].toDouble();
double total = ;
for(int i = ;i < lst.size();++i)
total += lst[i].toDouble();
if(total - m_cpu_total__ > )
{
qDebug("cpu rate:%.2lf%%",(use - m_cpu_use__) / (total - m_cpu_total__) * 100.0);
m_cpu_total__ = total;
m_cpu_use__ = use;
return true;
}
}
return false;
}
bool resource_minitor::get_disk_speed__()
{
QProcess process;
process.start("iostat -k -d");
process.waitForFinished();
process.readLine();
process.readLine();
process.readLine();
QString str = process.readLine();
str.replace("\n","");
str.replace(QRegExp("( ){1,}")," ");
auto lst = str.split(" ");
if(lst.size() > )
{
qDebug("disk read:%.0lfkb/s disk write:%.0lfkb/s",(lst[].toDouble() - m_disk_read__ ) / (m_timer_interval__ / 1000.0),(lst[].toDouble() - m_disk_write__) / (m_timer_interval__ / 1000.0));
m_disk_read__ = lst[].toDouble();
m_disk_write__ = lst[].toDouble();
return true;
}
return false;
}
bool resource_minitor::get_disk_space__()
{
QProcess process;
process.start("df -k");
process.waitForFinished();
process.readLine();
while(!process.atEnd())
{
QString str = process.readLine();
if(str.startsWith("/dev/sda"))
{
str.replace("\n","");
str.replace(QRegExp("( ){1,}")," ");
auto lst = str.split(" ");
if(lst.size() > )
qDebug("挂载点:%s 已用:%.0lfMB 可用:%.0lfMB",lst[].toStdString().c_str(),lst[].toDouble()/1024.0,lst[].toDouble()/1024.0);
}
}
return true;
}
bool resource_minitor::get_path_space(const QString & path)
{
struct statfs diskInfo;
statfs(path.toUtf8().data(), &diskInfo);
qDebug("%s 总大小:%.0lfMB 可用大小:%.0lfMB",path.toStdString().c_str(),(diskInfo.f_blocks * diskInfo.f_bsize)/1024.0/1024.0,(diskInfo.f_bavail * diskInfo.f_bsize)/1024.0/1024.0);
return true;
}
Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等的更多相关文章
- Linux下使用java获取cpu、内存使用率
原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...
- Python获取CPU、内存使用率以及网络使用状态代码
Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm
- 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...
- C/C++获取Linux系统CPU和内存及硬盘使用情况
需求分析: 不使用Top df free 等命令,利用C/C++获取Linux系统CPU和内存及硬盘使用情况 实现: //通过获取/proc/stat (CPU)和/proc/meminfo(内存 ...
- Java获取Linux系统cpu使用率
原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.Fi ...
- [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具
linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...
- Golang获取CPU、内存、硬盘使用率
Golang获取CPU.内存.硬盘使用率 工具包 go get github.com/shirou/gopsutil 实现 func GetCpuPercent() float64 { percent ...
- 获取CPU和内存的使用率
1.获取CPU的使用率 主要就是一个计算. int CUseRate::GetCPUUseRate() //获取CPU使用率 { ; FILETIME ftIdle, ftKernel, ftUser ...
- C#获取CPU和内存使用率
获取内存使用率 方式1: using System; using System.Runtime.InteropServices; namespace ConsoleApp1 { public clas ...
随机推荐
- linux Posix线程同步(条件变量) 实例
条件变量:与互斥量一起使用,暂时申请不到某资源时进入条件阻塞等待,当资源具备时线程恢复运行 应用场合:生产线程不断的生产资源,并通知产生资源的条件,消费线程在没有资源情况下进入条件等待,一直等到条件信 ...
- docker ,docker与虚拟机的区别
什么是Docker: 1.Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 L ...
- ionic2+angularjs2
感觉TypeScript真不错,强类型,有点类似c#的感觉,而且如果写错了编辑器都可以感知出来,于是就开始看ionic2.ionic2是基于angular2的,语法跟以前有了很大的变化.但自己写原生a ...
- oracle数据库连接缓慢
今天连接数据库时非常的慢,大概将近1分钟,才能连上,感觉不对,登录数据库所在的服务器,进行检查,常规的内存.硬盘.CPU全都正常,然后想要进入oracle用户时报错了:su: cannot set u ...
- echart 百度地图实现效果
1 必须引入 echarts.js文件 以及 china.js 点文件才可以执行代码2 ehcart官方文档有点小恶心,看了半天,好多东西都不是很清楚,必须挨个实验才行,希望对一些初学者来说可以少走一 ...
- vs code 操作Git
首次从Git拉取项目:Ctrl+Shift+p 选择Git 克隆 拉取成功后 Ctrl+波浪号进入控制台选择终端 使用npm install下载依赖 到此就从Git拉取成功了: 如果提示npm错误,有 ...
- ubuntu16.04 安装java
1.从官网下载 jdk-8u191-linux-x64.tar.gz(https://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...
- Linux安装JDK.8
E&T: CentOS_7.4 64位; jdk-8u191-linux-x64; Xftp5; Xshell5; P1.下载Linux环境下的jdk1.8 下载链接: https://www ...
- Spring-Cloud-Netflix
Spring Cloud Netflix组件以及部署 (1)Eureka,服务注册和发现,它提供了一个服务注册中心.服务发现的客户端,还有一个方便的查看所有注册的服务的界面. 所有的服务使用Eurek ...
- 汇编实验1(又是作业emm)
实验任务:学会使用debug 1.使用Debug,将程序段写入内存: 机器码: b8 20 4e 05 16 14 bb 00 20 01 d8 89 c3 01 d8 b8 1a 00 bb 26 ...