在linux环境下,我们使用C语言编程,如何正确计算CPU使用率?(不限/proc/stat)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在linux环境下,我们使用C语言编程,如何正确计算CPU使用率?(不限/proc/stat)相关的知识,希望对你有一定的参考价值。

参考技术A 我的笨方法:
以/proc/stat为例,它里面的内容如下:(第一行的几个单词,是我为了便于说明,另外标注的)
user nice system idle iowait irq softirq
cpu 65376847 362756 2405159 10834971593 3765180 93399 2395097 0
cpu0 7680302 5263 111909 1355640955 47680 0 185343 0
cpu1 6527638 2261 327795 1356540189 249151 1 24242 0
intr 21259182 122 97003 0 0 0 0 0 0 1 44 0 0 4290639 0 0 0 742540 1330673 0 0 0 0 0 111 173 0 0 0 0 161039 191398 10286 2440 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 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 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
ctxt 42582486
btime 1376534806
processes 346513
procs_running 1
procs_blocked 0
softirq 21851001 2 9105868 18006 318205 256633 2 1384334 1159984 60546 9547421
---------------------------- 分割线------------------------------
说明:
user:从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
system:从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
idle:从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
iowait:从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq:从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
softirq:从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)
CPU时间=user+system+nice+idle+iowait+irq+softirq
-------------------------下面这几项可以不看------------------
intr:第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
ctxt:自系统启动以来CPU发生的上下文交换的次数。
btime:从系统启动到现在为止的时间,单位为秒。
processes:自系统启动以来所创建的任务的个数目。
procs_running:当前运行队列的任务的数目。
procs_blocked:当前被阻塞的任务的数目。
-----------------------------计算方法-----------------------------
那么CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)*100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100
=============================================
建议:要用C语言来编程实现的话,提取各项数据会比较复杂,而用shell脚本来提取的话,会简单的多;所以你可以尝试用脚本来提取数据并计算出CPU使用率,然后在C程序中用system( )函数来调用这个脚本。
参考技术B 需要判断两次或多次取中间值,否则不准确 /proc这个方法就可以啊 参考技术C time不能用吗? 参考技术D 这不懂,呜呜,我也想知道!

[Linux]初学者如何在Linux环境下配置gcc编程环境,并编写第一个C程序HelloWorld

[Linux]初学者如何在Linux下配置gcc编译环境,并编写第一个C程序HelloWorld!

第一次在Linux操作系统下用C语言编写程序,一头雾水,在网络上搜集了各种资源后整理出以下解决步骤,共勉。

  • 说明:
    Linux版本:ubuntu-18.04.1
    VMware版本:VMware Workstation Pro 15.5.0
  1. 同时按下 Ctrl + Alt + T 键,启动Linux终端。

在这里插入图片描述
2. 安装vim编辑器:vim是从vi发展出来的一个文本编辑器,该编辑器具有代码补完、编译及错误跳转等方便编程的功能,并且在程序员中被广泛使用,而vi是老式的文本处理器。
安装vim编辑器,在终端输入:sudo apt install vim(提示需要输入密码,Linux环境下输入密码时密码是隐藏的,正确输入密码即可,输入错误可重新输入)
安装完毕后输入:vim(检验vim编辑器是否安装成功,成功后出现如下界面)

在这里插入图片描述
3. 安装gcc:GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)
安装gcc,输入:sudo apt install gcc
安装buil-essential,输入:sudo apt install build-essential
安装完成后检验安装是否成功,输入:gcc --version
成功后界面如下:

在这里插入图片描述
至此gcc编译环境搭建完成,下面开始编写第一个C程序Hello World!

在这里插入图片描述
如上图:

  1. 使用 mkdir ProgramLife 命令创建一个名为ProgramLife的文件夹;
  2. 使用 cd ProgramLife 命令进入ProgramLilfe文件夹;
  3. 在PrograLife文件夹下使用 vim HelloWorld.c 命令创建HelloWorld.c文件,按Enter键后进入源代码编辑界面;

在这里插入图片描述

  1. 如上图,编辑完成后按Esc键,输入 :wq (输入内容包含一个冒号),完成编辑并自动保存并退出;

在这里插入图片描述
如上图:
6. 使用cd ProgramLife命令进入刚刚创建的ProgramLife文件夹;
7. 使用gcc HelloWorld.c 对编辑好的c程序源文件进行编译,编译通过后终端不提示任何信息。
8. 使用ls 命令列出此文件夹下所有文件,发现其中有一个a.out和HelloWorld.c文件,a.out文件即为HelloWorld.c文件编译成功后产生的目标文件。
9. 使用./a.out 命令运行编译成功后的文件,发现终端输出了Hello World!。

至此,在Linux下编写的第一个c语言程序成功运行!

参考文章:在Linux下编写第一个C程序,Hello world

以上是关于在linux环境下,我们使用C语言编程,如何正确计算CPU使用率?(不限/proc/stat)的主要内容,如果未能解决你的问题,请参考以下文章

[Linux]初学者如何在Linux环境下配置gcc编程环境,并编写第一个C程序HelloWorld

如何C语言显示图片(linux环境)

C语言---统计字符串中统计单词个数

Linux下,GCC环境,C语言,使用Opencl, 如何做一个有Button的界面?

Linux环境下C编程指南的内容简介

Linux下,GCC环境,C语言,使用Opencl, 如何做一个有Button的界面?