Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等,实际上大部分都和qt无关的,用其他语言也可以获取。
code:
.h

#ifndef RESOURCE_MINITOR_H
#define RESOURCE_MINITOR_H
#include <QObject>
#include <QTimer>
#include <QProcess>
#include <QDebug>
class resource_minitor : public QObject
{Q_OBJECT
public:explicit resource_minitor(QObject *parent = nullptr);
private slots:void get_resource__();
private:bool get_mem_usage__();bool get_net_usage__();bool get_disk_speed__();bool get_cpu_usage__();bool get_disk_space__();bool get_path_space(const QString & path);
private:const int m_timer_interval__ = 1000;QTimer monitor_timer__;double m_send_bytes__ = 0;double m_recv_bytes__ = 0;double m_disk_read__ = 0;double m_disk_write__ = 0;double m_cpu_total__ = 0;double m_cpu_use__ = 0;
};
#endif // RESOURCE_MINITOR_H

.cpp

#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() > 6){qDebug("mem total:%.0lfMB free:%.0lfMB",lst[1].toDouble(),lst[6].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() > 9 && lst[0] == "enp2s0:"){double recv = 0;double send = 0;if(lst.size() > 1)recv = lst[1].toDouble();if(lst.size() > 9)send = lst[9].toDouble();qDebug("%s 接收速度:%.0lfbyte/s 发送速度:%.0lfbyte/s",lst[0].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() > 3){double use = lst[1].toDouble() + lst[2].toDouble() + lst[3].toDouble();double total = 0;for(int i = 1;i < lst.size();++i)total += lst[i].toDouble();if(total - m_cpu_total__ > 0){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() > 5){qDebug("disk read:%.0lfkb/s disk write:%.0lfkb/s",(lst[4].toDouble() - m_disk_read__ ) / (m_timer_interval__ / 1000.0),(lst[5].toDouble() - m_disk_write__) / (m_timer_interval__ / 1000.0));m_disk_read__ = lst[4].toDouble();m_disk_write__ = lst[5].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() > 5)qDebug("挂载点:%s 已用:%.0lfMB 可用:%.0lfMB",lst[5].toStdString().c_str(),lst[2].toDouble()/1024.0,lst[3].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;
}

效果:

示例代码(Qt5.9工程):http://download.csdn.net/download/yangyang031213/10204938
https://github.com/yangyang0312/cpp/tree/master/Qt/resource_minitor

Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等相关推荐

  1. 【Linux学习笔记】Linux获取CPU使用率,内存使用率和磁盘使用率

    实现目标: 在Linux上使用shell脚本回显系统当前的CPU使用率.内存使用率和磁盘空间使用率 1.CPU使用率: 使用top命令能够实时显示系统中各个进程的资源占用状况,所以这边可以使用top命 ...

  2. VB.NET工作笔记015---vb.net获取cpu使用率,内存使用率_未能找到具有指定类别名“Processor”、计数器名“% Processor Time”的性能计数

    vb.net获取系统CPU的使用率,和内存的使用率 获取cpu的使用率,用: performanceCounter1这个控件,一定要记得,写上Processor 这个: counterName cat ...

  3. java获取cpu使用率/内存使用率/硬盘的使用率

    import java.io.File; import java.io.InputStreamReader; import java.io.LineNumberReader; import java. ...

  4. linux 获取CPU NUMA内存节点信息

    root@ubuntu2104:~# lscpu |grep NUMA

  5. Linux小知识---利用Snmp远程获取CPU,内存和磁盘使用率

    知识点回顾 <网络协议学习-SNMP> 前面写了一篇Snmp协议的知识点文章,今天要利用这些知识点,再加一些shell编程知识点,实现一个利用shell脚本,远程获取某个Agent的CPU ...

  6. linux c 获取 CPU、内存、IO、磁盘、网速

    代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string ...

  7. java 收集系统资源_方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息

    CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...

  8. java获取网络带宽_Linux Java 获取CPU使用率,内存使用率,磁盘IO,网络带宽使用率等等...

    /** * 获取带宽上传下载速度 * @return */ public String getNetWorkSpeed() { boolean result = false; String detai ...

  9. java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务

    java 监控linux服务器cpu.内存.java进程是否存活,发现异常发送邮件提醒 前一段时间在维护一个N年前的项目,这个项目有十几个服务器,每个服务器上有十几个服务.接手后的几个星期天天有事,要 ...

最新文章

  1. 【MATLAB】符号数学计算(一):符号对象的创建
  2. CMFCRibbonStatusBar中添加图片按钮
  3. 〖Demo〗-- HAproxy配置文件操作
  4. IDA python 脚本编程使用参考资料链接
  5. OJ1063: 最大公约与最小公倍(C语言)
  6. qt中dll缺失以及无法启动程序的正确解决方法
  7. 路由器(Tenda 811R)变砖——修复
  8. 计算机应用cad题库,cad试题库
  9. Pug/jade快速上手教程
  10. Chrome安装插件Hackbar
  11. z世代消费力白皮书_LSPACE丨Z世代虽穷但买的态度你真的懂吗
  12. linux 程序的权限设置,Linux权限设置详解
  13. 双目立体视觉2——双目成像原理
  14. 超级授权专业版 SuperSU Pro v2.68 简体中文版
  15. 关于蓝牙打印机的一些问题
  16. 【题解】2020年蓝桥杯C/C++程序设计B组·试题 D: REPEAT 程序
  17. PCB设计十条黄金法则
  18. 爱江山更爱美人 Win 10 下利用计划任务自动种地喂猫
  19. ### Cause: java.sql.SQLSyntaxErrorException: Column ‘update_time‘ specified twice
  20. 《互联网时代》 第六集 迁徙

热门文章

  1. 专家:还早呢!有意识的人工智能兴起还需要几十年
  2. 【深度】剖析微金云宝适合新手的几点优势
  3. Python——面向对象
  4. SAP操作手册之 商品/物料主数据增强
  5. java webclient_java使用WebClient获取不到重定向的网页信息
  6. c++ txt文件的读写及乱码问题解决
  7. win10添加美式键盘_戴尔笔记本win10降win7教程
  8. android sharedpreferences加密,(译)使用AndroidX安全库加密SharedPreferences
  9. 12864点阵液晶显示模块的原理和实例程序(HJ12864M-1)
  10. lte同步信号 matlab,一种TD-LTE系统下行辅同步信号检测方法