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

摘要:
QObject(父级){connect(&}boolresource_minitor;str.replace(“”;if(lst.size)>lst[6]。toDouble());process.atEnd()){QStringstr=process.readLine();lst[0].toStdString().c_str();
#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()<<"
";
}
bool resource_minitor::get_mem_usage__()
{
    QProcess process;
    process.start("free -m"); //使用free完成获取
    process.waitForFinished();
    process.readLine();
    QString str = process.readLine();
    str.replace("
","");
    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("
","");
        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("
","");
    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("
","");
    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("
","");
            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;
}

免责声明:文章转载自《Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在Qt中手动添加ui文件Brocade SAN交换机常用命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FI常用BAPI(转)

总帐会计:  (比较简单全部测试通过,关帐时使用)      Line item of document for ledger with summary table GL   F: BAPI_GLX_GETDOCITEMS        Closing balance of G/L account for chosen year   F: BAPI_GL_...

laravel excel 导入

<pre name="code" class="php"> /**       * 导入       * 保存       * fyj       */       public function importexambank(Request $request)       {              // dd($examfilename...

ovn-kubernetes执行流程概述

Master部分 1、master初始化 以node name创建一个distributed logical router 创建两个load balancer用于处理east-west traffic,一个处理TCP,另一个处理UDP 创建一个名为"join"的logical switch用于连接gateway router和distributed ro...

按键消抖

按键消抖原因 使用机械弹性开关,当机械触点闭合/断开时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会马上断开。而是会在闭合/断开的瞬间伴随一连串的抖动,为避免这种现象带来的问题,需要进行按键消抖。 硬件消抖 在按键个数较少时可以使用硬件方法消除抖动。下图所示为使用RS触发器进行硬件消抖,当按键未按下时,输出为0;当按键按...

[转]ORA00257解决

 原:http://blog.chinaunix.net/u/26381/showart_373304.html 从Oracle9i开始,借助于UNDO日志文件提供了闪回查询的功能,由于功能也有一定的局限性,也就是说依赖于UNDO日志的事务不能被覆盖,所以在Oracle10g开始又采用了一种新的FlashBack日志来实现这个功能,而且更为强大,可以将数据...

CDH6.2安装

一、准备工作:1、普通用户root权限准备(sudo,此处用aiot用户,sudoer)groupadd -r testuseradd -d /home/test/ -m -s /bin/bash -c "user" -g test -p 2019 -r test#另外特别注意:aiot及密码用户在cloudera manager server中会配置进去...