Linux C获取CPU占用率

通过读取/proc/stat文件获取当前系统的CPU占用率。

Linux系统上的/proc目录是一种文件系统,即proc文件系统,与其它常见的文件系统不同的是,/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

/proc/stat文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致。

[root@imx6ul ~]# cat /proc/stat
cpu  51558 0 97237 3155932 16 2 559 0 0 0
cpu0 51558 0 97237 3155932 16 2 559 0 0 0
intr 22064559 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21709449 0 116917 25179 106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 159147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52041 0 0 0 0 0 0 0 1590 16 0 0
ctxt 44700603
btime 1667437846
processes 33964
procs_running 1
procs_blocked 0
softirq 1323375 0 641287 16949 58780 0 0 169025 0 9728 427606

C代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
typedef struct cpu_occupy_          //定义一个cpu occupy的结构体
{
    char name[20];                  //定义一个char类型的数组名name有20个元素
    unsigned int user;              //定义一个无符号的int类型的user
    unsigned int nice;              //定义一个无符号的int类型的nice
    unsigned int system;            //定义一个无符号的int类型的system
    unsigned int idle;              //定义一个无符号的int类型的idle
    unsigned int iowait;
    unsigned int irq;
    unsigned int softirq;
}cpu_occupy_t;
 
double cal_cpuoccupy (cpu_occupy_t *o, cpu_occupy_t *n)
{
    double od, nd;
    double id, sd;
    double cpu_use ;
 
    od = (double) (o->user + o->nice + o->system +o->idle+o->softirq+o->iowait+o->irq);//第一次(用户+优先级+系统+空闲)的时间再赋给od
    nd = (double) (n->user + n->nice + n->system +n->idle+n->softirq+n->iowait+n->irq);//第二次(用户+优先级+系统+空闲)的时间再赋给od
 
    id = (double) (n->idle);    //用户第一次和第二次的时间之差再赋给id
    sd = (double) (o->idle) ;    //系统第一次和第二次的时间之差再赋给sd
    if((nd-od) != 0)
        cpu_use =100.0 - ((id-sd))/(nd-od)*100.00; //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used
    else 
        cpu_use = 0;
    return cpu_use;
}
 
void get_cpuoccupy (cpu_occupy_t *cpust)
{
    FILE *fd;
    int n;
    char buff[256];
    cpu_occupy_t *cpu_occupy;
    cpu_occupy=cpust;
 
    fd = fopen ("/proc/stat", "r");
    if(fd == NULL)
    {
            perror("fopen:");
            exit (0);
    }
    fgets (buff, sizeof(buff), fd);
 
    sscanf (buff, "%s %u %u %u %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle ,&cpu_occupy->iowait,&cpu_occupy->irq,&cpu_occupy->softirq);
 
    fclose(fd);
}
 
double get_sysCpuUsage()
{
    cpu_occupy_t cpu_stat1;
    cpu_occupy_t cpu_stat2;
    double cpu;
    get_cpuoccupy((cpu_occupy_t *)&cpu_stat1);
    sleep(1);
    //第二次获取cpu使用情况
    get_cpuoccupy((cpu_occupy_t *)&cpu_stat2);
 
    //计算cpu使用率
    cpu = cal_cpuoccupy ((cpu_occupy_t *)&cpu_stat1, (cpu_occupy_t *)&cpu_stat2);
 
    return cpu;
}
 
int main(int argc,char **argv)
{
    while(1)
    {
        printf("CPU占用率:%f\n",get_sysCpuUsage());
    }
    return 0;
}
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 在Linux系统中,获取指定进程的CPU占用率c可以使用top命令或ps命令。这两个命令都可以查看系统中运行的进程信息,包括进程的CPU占用率。 使用top命令获取指定进程的CPU占用率可以通过以下步骤实现: 1. 打开终端,输入top命令。 2. 按下shift+p,然后输入要查看的进程号或名称,回车。 3. top命令将会显示该进程的CPU占用率。 使用ps命令获取指定进程的CPU占用率可以通过以下步骤实现: 1. 打开终端,输入ps命令,加上选项p和进程号或名称。 2. 在选项中加上-o选项,后面输入%cpu或%CPU。 3. 执行该命令,将会显示该进程的CPU占用率。 以上两个命令都可以实现获取指定进程CPU占用率的功能,具体使用哪种方法取决于用户的需求。需要注意的是,这两个命令获取CPU占用率是该进程在系统整体CPU使用率中的占比,并不是该进程的实际CPU使用率。如果需要获取该进程的实际CPU使用率,需要使用更为专业的工具或命令。 ### 回答2: 在Linux系统中,我们可以通过多种方式来获取指定进程的CPU占用率。以下是几个常用的方法: 1. top命令 top命令是一个基于终端的系统监控工具,它能够显示系统中进程的实时信息,包括CPU占用率。要获取指定进程的CPU占用率,可以按下“Shift + P”键,然后输入进程ID或进程名称即可。 2. ps命令 ps命令是另外一个常用的用于获取进程信息的命令。它可以显示所有进程的信息,也可以根据进程ID或进程名称来获取指定进程的信息。要获取指定进程的CPU占用率,可以使用如下命令: ps -o pid,%cpu,comm -p 进程ID 其中,“%cpu”表示CPU占用率,它是ps命令的一个输出参数。 3. pidstat命令 pidstat是一个用于进程性能监测的工具,它可以显示每个进程的CPU占用率、内存占用率等详细信息。要获取指定进程的CPU占用率,可以使用如下命令: pidstat -p 进程ID 其中,“-p”参数表示指定要监测的进程ID。 4. top -n命令 top命令还可以使用“-n”参数来指定监测次数。这样,我们可以在一定时间内获取指定进程的平均CPU占用率。例如,要获取进程ID为123的进程在10秒内的平均CPU占用率,可以使用如下命令: top -b -n 10 -d 1 -p 123 |grep "123" 其中,“-b”表示以批处理模式运行top命令,“-n”表示监测次数,“-d”表示监测间隔,“-p”表示要监测的进程ID。最后使用grep命令来过滤输出信息,只保留目标进程的信息。 ### 回答3: 获取指定进程 CPU 占用率的方法,在 Linux 系统中有多种实现方式。本文将介绍两种常见的方法: 方法一:使用 top 命令 top 命令可以查看系统中所有进程的 CPU 占用情况,可以通过 top 命令获取指定进程的 CPU 占用率。具体方法如下: 1. 打开终端,输入 top 命令; 2. 按下“Shift + P”组合键,进入按 CPU 占用率排序模式; 3. 找到目标进程对应的 PID(进程 ID),使用“k”命令杀掉该进程并记录其 CPU 占用率,或记录当前 CPU 占用率。 方法二:使用 ps 命令和 awk 命令 ps 命令可以列出系统中所有进程的信息,awk 命令可以对列数据进行处理。使用这两个命令可以获取指定进程的 CPU 占用率。具体方法如下: 1. 打开终端,输入“ps aux | grep [进程名称]”命令,获取目标进程的 PID; 2. 输入“top -p [PID]”命令,实时监控目标进程的 CPU 占用率,并记录需要的信息; 3. 按下“Ctrl + C”组合键退出 top 命令。 需要注意的是,在使用这两种方法获取 CPU 占用率时,数据的精确性和稳定性都受到系统负载等因素的影响。为获得更准确的结果,可以多次测量、取平均值,或使用更具专业性的系统监控工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值