精华内容
下载资源
问答
  • Linux_Linux 有关运行中的进程的信息,/proc 文件系统可以用于获取运 - phpStudy
    2021-05-13 07:06:46

    Linux 有关运行中的进程的信息

    /proc 文件系统可以用于获取运行中的进程的信息。在 /proc 中有一些编号的子目录。每个编号的目录对应一个进程 id (PID)。这样,每一个运行中的进程 /proc 中都有一个用它的 PID 命名的目录。

    这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。让我们试着查找一个运行中的进程。

    $ ps -aef | grep mozilla        root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla

    上述命令显示有一个正在运行的 mozilla 进程的 PID 是 32558。相对应的,/proc 中应该有一个名叫 32558 的目录

    上面这个command通过Ps来活得所有进程信息。然后用管道符输入到grep这里。通过grep命令,来获得含有mozilla的进程信息。PS命令的详解如下:

    ps

    1.作用        ps显示瞬间进程 (process) 的动态,使用权限是所有使用者。

    2.格式        ps [options] [--help]

    3.主要参数        ps的参数非常多, 此出仅列出几个常用的参数。

    -A:列出所有的进程。        -l:显示长列表。        -m:显示内存信息。        -w:显示加宽可以显示较多的信息。        -e:显示所有进程。        a:显示终端上的所有进程,包括其它用户的进程。        -au:显示较详细的信息。        -aux:显示所有包含其它使用者的进程。

    4.说明        要对进程进行监测和控制,首先要了解当前进程的情况,也就是需要查看当前进程。ps命令就是最基本、也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行、运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。图2给出了ps-aux命令详解。大部分信息都可以通过执行该命令得到。最常用的三个参数是u、a、x。下面就结合这三个参数详细说明ps命令的作用:ps aux

    STAT 表示进程的状态,其中D为不可中断的静止(I/O动作);R正在执行中;S静止状态;T暂停执行;Z不存在,但暂时无法消除;W没有足够的内存分页可分配;高优先序的进程;N低优先序的进程;L有内存分页分配并锁在内存体内 (实时系统或 I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是所执行的指令。

    4.应用实例        在进行系统维护时,经常会出现内存使用量惊人,而又不知道是哪一个进程占用了大量进程的情况。除了可以使用top命令查看内存使用情况之外,还可以使用下面的命令:

    ps aux | sort +5n

    $ ls -l /proc/32558        total 0        -r--r--r-- 1 root root 0 Dec 25 22:59 cmdline        -r--r--r-- 1 root root 0 Dec 25 22:59 cpu        lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/        -r-------- 1 root root 0 Dec 25 22:59 environ        lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*        dr-x------ 2 root root 0 Dec 25 22:59 fd/        -r--r--r-- 1 root root 0 Dec 25 22:59 maps        -rw------- 1 root root 0 Dec 25 22:59 mem        -r--r--r-- 1 root root 0 Dec 25 22:59 mounts        lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> //        -r--r--r-- 1 root root 0 Dec 25 22:59 stat        -r--r--r-- 1 root root 0 Dec 25 22:59 statm        -r--r--r-- 1 root root 0 Dec 25 22:59 status

    文件 "cmdline" 包含启动进程时调用的命令行。"envir" 进程的环境变两。 "status" 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"。每个进程的目录都有几个符号链接,"cwd"是指向进程当前工作目录的符号链接,"exe"指向运行的进程的可执行程序,"root"指向被这个进程看作是根目录的目录 (通常是"/")。目录"fd"包含指向进程使用的文件描述符的链接。 "cpu"仅在运行 SMP 内核时出现,里面是按 CPU 划分的进程时间。 /proc/self 是一个有趣的子目录,它使得程序可以方便地使用 /proc 查找本进程地信息。/proc/self 是一个链接到 /proc 中访问 /proc 的进程所对应的 PID 的目录的符号链接。

    以上就是偶对/proc的内容补充。大家可以看到,这个只是在outline上很小的一个知识点,就牵涉到了那么多的内容。偶想,这个大概就是为什么Linux难学的原因吧。

    小记:因为学习Linux,单位和家里的两套机器都安装了vmware server 1.0.3。但是这个软件不是很稳定。现在家里的那台就是死活无法运行Fedora 7.连vmware的开机画面都没有。只要运行F7,就是黑屏。

    本文作者:相关阅读:

    我装了IIS了,可是又进不去http://localhost 了

    解析SQL Server 2008在线事务处理功能

    网友整理的Vista防火墙使用技巧

    sql server 2005 的卸载和自动备份 说明

    FreeBSD5.0硬盘安装指南

    Linux系统下发送Email的C语言代码

    javascript下阻止表单重复提交、防刷新、防后退

    8个工作实用而有趣Linux下的Bash命令提示行

    Discuz!4.1.0 IIS Rewrite设置方法

    开始使用ASP脚本语言

    asp 动态数组 提供Add、Insert、Remove、RemoveAt、Search等方法。

    repaint和reflow的相关知识

    winxp 安装MYSQL 出现Error 1045 access denied 的解决方法

    JavaScript DOM学习第四章 getElementByTagNames

    更多相关内容
  • proc文件系统介绍  /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数...

    proc文件系统介绍

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

        /proc目录中有一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,它们是读取进程信息的接口。此外,在Linux2.6.0-test6以上的版本中/proc/pid目录中有一个task目录,/proc/pid/task目录中也有一些以该进程所拥有的线程的线程号命名的目录/proc/pid/task/tid,它们是读取线程信息的接口。

     

    /proc/stat文件

    1. [root@root c_study]# cat /proc/stat   
    2. cpu  15579 99 13680 698457 10939 40 651 0 0  
    3. cpu0 1669 7 1974 338065 1396 5 9 0 0  
    4. cpu1 13910 91 11705 360391 9542 35 641 0 0  
    5. intr 957831 163 8 0 1 1 0 5 0 1 0 0 0 101 0 0 3582 0 37804 3657 22410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  
    6. ctxt 501479  
    7. btime 1363495431  
    8. processes 40101  
    9. procs_running 1  
    10. procs_blocked 0  
    11. softirq 1396087 0 693403 12972 15932 35928 3 44577 479 592793  
    12. [root@root c_study]#   

     

    第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:

    参数          解析(单位:jiffies)

    (jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间)

    user ( 15579 )    从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。

    nice (99)      从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间

    system (13680)  从系统启动开始累计到当前时刻,处于核心态的运行时间

    idle (698457)   从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间

    iowait (10939) 从系统启动开始累计到当前时刻,IO等待时间(since 2.5.41)

    irq (40)           从系统启动开始累计到当前时刻,硬中断时间(since 2.6.0-test4)

    softirq (651)      从系统启动开始累计到当前时刻,软中断时间(since 2.6.0-test4)

    stealstolen(0)     which is the time spent in other operating systems when running in a virtualized environment(since 2.6.11)

    guest(0)        which is the time spent running a virtual  CPU  for  guest operating systems under the control of the Linux kernel(since 2.6.24)

     结论:总的cpu时间totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen +guest

      

    /proc/<pid>/stat文件                                          

     

    该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计

    到当前时刻。以下通过实例数据来说明该文件中各字段的含义。

    [zhengangen@buick ~]# cat /proc/6873/stat

    6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 0 0 0 0 17 0 0 0

     

    说明:以下只解释对我们计算Cpu使用率有用相关参数

    参数                                                                解释

    pid=6873                            进程号

    utime=1587                       该任务在用户态运行的时间,单位为jiffies

    stime=41958                      该任务在核心态运行的时间,单位为jiffies

    cutime=0                            所有已死线程在用户态运行的时间,单位为jiffies

    cstime=0                            所有已死在核心态运行的时间,单位为jiffies

     

    结论:进程的总Cpu时间processCpuTime = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间。

     

    /proc/<pid>/task/<tid>/stat文件

     该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义同/proc/<pid>/stat文件。

             注意,该文件中的tid字段表示的不再是进程号,而是linux中的轻量级进程(lwp),即我们通常所说的线程。

    结论:线程Cpu时间threadCpuTime = utime + stime

     

     

    总的Cpu使用率计算

     

    计算方法:

    1、  采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:

    (user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

    2、  计算总的Cpu时间片totalCpuTime

    a)         把第一次的所有cpu使用情况求和,得到s1;

    b)         把第二次的所有cpu使用情况求和,得到s2;

    c)         s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;

    3、计算空闲时间idle

    idle对应第四列的数据,用第二次的idle - 第一次的idle即可

    idle=第二次的idle - 第一次的idle

    4、计算cpu使用率

    pcpu =100* (total-idle)/total

     

    5、同理可以用同样的方法求出其他进程和线程所占cpu资源

     

    源码

    1. #include<stdio.h>  
    2. #include<stdlib.h>  
    3. #include<string.h>  
    4.   
    5. #define __DEBUG__ 1  
    6. #define CK_TIME 1  
    7.   
    8. int main(int argc ,char *argv[])  
    9. {  
    10.         FILE *fp;  
    11.         char buf[128];  
    12.         char cpu[5];  
    13.         long int user,nice,sys,idle,iowait,irq,softirq;  
    14.   
    15.         long int all1,all2,idle1,idle2;  
    16.         float usage;  
    17.   
    18.         while(1)  
    19.         {  
    20.                 fp = fopen("/proc/stat","r");  
    21.                 if(fp == NULL)  
    22.                 {  
    23.                         perror("fopen:");  
    24.                         exit (0);  
    25.                 }  
    26.   
    27.   
    28.                 fgets(buf,sizeof(buf),fp);  
    29. #if __DEBUG__  
    30.                 printf("buf=%s",buf);  
    31. #endif  
    32.                 sscanf(buf,"%s%d%d%d%d%d%d%d",cpu,&user,&nice,&sys,&idle,&iowait,&irq,&softirq);  
    33.                 /* 
    34. #if __DEBUG__ 
    35. printf("%s,%d,%d,%d,%d,%d,%d,%d\n",cpu,user,nice,sys,idle,iowait,irq,softirq); 
    36. #endif 
    37. */  
    38.                 all1 = user+nice+sys+idle+iowait+irq+softirq;  
    39.                 idle1 = idle;  
    40.                 rewind(fp);  
    41.                 /*第二次取数据*/  
    42.                 sleep(CK_TIME);  
    43.                 memset(buf,0,sizeof(buf));  
    44.                 cpu[0] = '\0';  
    45.                 user=nice=sys=idle=iowait=irq=softirq=0;  
    46.                 fgets(buf,sizeof(buf),fp);  
    47. #if __DEBUG__  
    48.                 printf("buf=%s",buf);  
    49. #endif  
    50.                 sscanf(buf,"%s%d%d%d%d%d%d%d",cpu,&user,&nice,&sys,&idle,&iowait,&irq,&softirq);  
    51.                 /* 
    52. #if __DEBUG__ 
    53. printf("%s,%d,%d,%d,%d,%d,%d,%d\n",cpu,user,nice,sys,idle,iowait,irq,softirq); 
    54. #endif 
    55. */  
    56.                 all2 = user+nice+sys+idle+iowait+irq+softirq;  
    57.                 idle2 = idle;  
    58.   
    59.                 usage = (float)(all2-all1-(idle2-idle1)) / (all2-all1)*100 ;  
    60.   
    61.   
    62.                 printf("all=%d\n",all2-all1);  
    63.                 printf("ilde=%d\n",all2-all1-(idle2-idle1));  
    64.                 printf("cpu use = %.2f\%\n",usage);  
    65.                 printf("=======================\n");  
    66.   
    67.                 fclose(fp);  
    68.         }  
    69.         return 1;  
    70. }  

    gcc编译

     

     

     
    1. gcc -o cpu_use -g cpu_use.c   


    运行

     

     
     
      1. buf=cpu  15824 100 13772 879622 11014 40 720 0 0  
      2. buf=cpu  15837 100 13790 879731 11014 40 720 0 0  
      3. all=140  
      4. ilde=31  
      5. cpu use = 22.14%  
      6. =======================  
      7. buf=cpu  15837 100 13790 879731 11014 40 720 0 0  
      8. buf=cpu  15857 100 13824 879786 11014 40 721 0 0  
      9. all=110  
      10. ilde=55  
      11. cpu use = 50.00%  
      12. =======================  
      13. buf=cpu  15857 100 13824 879786 11014 40 721 0 0  
      14. buf=cpu  15877 100 13856 879842 11014 41 721 0 0  
      15. all=109  
      16. ilde=53  
      17. cpu use = 48.62%  
      18. =======================  
      19. buf=cpu  15877 100 13857 879842 11014 41 721 0 0  
      20. buf=cpu  15897 100 13889 879901 11014 41 722 0 0  
      21. all=112  
      22. ilde=53  
      23. cpu use = 47.32%  
      24. =======================  

    转自:https://blog.csdn.net/stormbjm/article/details/19202849

    展开全文
  • 首先看一下文件"/proc/stat" //"/proc/stat" //--------------------------------- // user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice. //cpu 195044598 6619 41

    源码地址:https://github.com/Rtoax/test/blob/master/c/cpu/cpu_occupy-proc-stat.c


    首先看一下文件"/proc/stat"

    //"/proc/stat"
    //---------------------------------
    //      user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice.
    //cpu  195044598 6619 410450970 967314001 64039 0 85058 394458 0 0
    //cpu0 48705507 1701 102480874 241499274 14130 0 82302 103069 0 0
    //cpu1 48866063 1895 102699462 241657644 15853 0 1245 97930 0 0
    //cpu2 48782413 1260 102714102 242031473 18001 0 790 96743 0 0
    //cpu3 48690614 1762 102556531 242125609 16054 0 720 96715 0 0

    上面的数值依次为:user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice.

    根据计算公式

    (user + nice + system)/(user + nice + system + idle + iowait + irq + softirq)*100%

    或者省去一些项

    (user + nice + system)/(user + nice + system + idle)*100%

    需要注意的是,我们需要统计一段时间的值来计算瞬时CPU利用率。那我们修改公式为:

    [(user1 + nice1 + system1) - (user0 + nice0 + system0)]
        /[(user1 + nice1 + system1 + idle1) - (user0 + nice0 + system0 + idle0)]*100%

    是不是很简单。下面给出完整的程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define NR_CPU_CORES    sysconf(_SC_NPROCESSORS_ONLN)   //CPU核心总数
    
    struct __cpu_core_stat {        
        //"/proc/stat"
        //---------------------------------
        //      user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice.
        //cpu  195044598 6619 410450970 967314001 64039 0 85058 394458 0 0
        //cpu0 48705507 1701 102480874 241499274 14130 0 82302 103069 0 0
        //cpu1 48866063 1895 102699462 241657644 15853 0 1245 97930 0 0
        //cpu2 48782413 1260 102714102 242031473 18001 0 790 96743 0 0
        //cpu3 48690614 1762 102556531 242125609 16054 0 720 96715 0 0
        long double user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice;
    };
    
    struct __cpu_core_stat_pair {
        struct __cpu_core_stat stat[2]; //0-start, 1-end
        struct {
            int integer, decimal;
        }occupy;
    //    long double occupy;
    };
    
    struct cpu_cores_occupy {
        
        int nr_cpu_core;
        struct __cpu_core_stat_pair *cpus_stat;
        
    };
    
    static int cpu_cores_occupy_init(struct cpu_cores_occupy *cco)
    {
        if(!cco)
            return -1;
    
        cco->nr_cpu_core = NR_CPU_CORES;
        cco->cpus_stat = malloc(sizeof(struct __cpu_core_stat_pair)*(NR_CPU_CORES+1));
        return 0;
    }
    
    static int __cpu_cores_occupy_get(struct cpu_cores_occupy *cco, int stat_idx/*0-start, 1-end*/)
    {
        int icore = 0;
        FILE *fp;
        struct __cpu_core_stat_pair *cpus_stat = cco->cpus_stat;
        
        fp = fopen("/proc/stat","r");
    
        for(icore=0;icore<=cco->nr_cpu_core;icore++) {
            fscanf(fp,"%*s %Lf %Lf %Lf %Lf %Lf %Lf %Lf %Lf %Lf %Lf",
                    &cpus_stat[icore].stat[stat_idx].user, 
                    &cpus_stat[icore].stat[stat_idx].nice, 
                    &cpus_stat[icore].stat[stat_idx].system, 
                    &cpus_stat[icore].stat[stat_idx].idle, 
                    &cpus_stat[icore].stat[stat_idx].iowait, 
                    &cpus_stat[icore].stat[stat_idx].irq, 
                    &cpus_stat[icore].stat[stat_idx].softirq, 
                    &cpus_stat[icore].stat[stat_idx].steal, 
                    &cpus_stat[icore].stat[stat_idx].guest, 
                    &cpus_stat[icore].stat[stat_idx].guest_nice);
        }
        fclose(fp);
    }
    
    static int cpu_cores_occupy_getstart(struct cpu_cores_occupy *cco)
    {
        return __cpu_cores_occupy_get(cco, 0);
    }
    
    static int cpu_cores_occupy_getend(struct cpu_cores_occupy *cco)
    {
        return __cpu_cores_occupy_get(cco, 1);
    }
    
    static int cpu_cores_occupy_call(struct cpu_cores_occupy *cco)
    {
        
        int icore = 0, idx;
        
        struct __cpu_core_stat_pair *cpus_stat = cco->cpus_stat;
        
        for(icore=0;icore<=cco->nr_cpu_core;icore++) {
            
            struct __cpu_core_stat *s0 = &cpus_stat[icore].stat[0];
            struct __cpu_core_stat *s1 = &cpus_stat[icore].stat[1];
    
            long double s0_0 = (s0->user+s0->nice+s0->system);
            long double s1_0 = (s1->user+s1->nice+s1->system);
            
            long double s0_1 = (s0->user+s0->nice+s0->system+s0->idle);
            long double s1_1 = (s1->user+s1->nice+s1->system+s1->idle);
            
            long double occupy = (s1_0 - s0_0) / (s1_1 - s0_1);
    
            cpus_stat[icore].occupy.integer = (int)(occupy*100);
            cpus_stat[icore].occupy.decimal = (int)(occupy*10000);
    
    //        printf("cpu%d %Lf = (%Lf - %Lf) / (%Lf - %Lf)\n", icore-1, cpus_stat[icore].occupy, s1_0, s0_0, s1_1, s0_1);                            
        }
    }
    
    
    static int cpu_cores_occupy_display(struct cpu_cores_occupy *cco)
    {
        int icore = 0;
        
        struct __cpu_core_stat_pair *cpus_stat = cco->cpus_stat;
        
        system("clear");
        for(icore=0;icore<=cco->nr_cpu_core;icore++) {
            printf("cpu%d \t%3d.%-4d %%\n", icore-1,cpus_stat[icore].occupy.integer, cpus_stat[icore].occupy.decimal);
        }
    
    }
    
    int main()
    {
        struct cpu_cores_occupy cco;
        
        cpu_cores_occupy_init(&cco);
    
        for(;;)
        {
            cpu_cores_occupy_getstart(&cco);
    
            sleep(1);
            
            cpu_cores_occupy_getend(&cco);
    
            cpu_cores_occupy_call(&cco);
    
            cpu_cores_occupy_display(&cco);
        }
    }
    

    开始运行

    [root@localhost cpu]# ./a.out 
    cpu-1 	  0.25   %
    cpu0 	  0.0    %
    cpu1 	  1.101  %
    cpu2 	  0.0    %
    cpu3 	  0.0    %
    

    我们写一个有自旋锁死锁的程序,或者干脆一个while(1);并绑定核心运行,如下:

    [root@localhost c]# taskset -c 1 ./a.out &
    [1] 182556
    [root@localhost c]# taskset -c 3 ./a.out &
    [2] 182569
    

    结果如下:

    即可看见CPU利用率100%的情况,然后我们用top指令验证一下:

    确认无误,下班。

     

    展开全文
  • Linux系统上的/proc目录是一种文件系统,即proc文件系统,与其它常见的文件系统不同的是,/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。...

    一、功能介绍

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

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

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

    wbyq@wbyq:/mnt/hgfs/linux-share-dir/linux_c$ cat /proc/stat 
    cpu  673896 219583 260680 4878312 1821 0 4364 0 0 0
    cpu0 320077 75898 124098 2490890 1231 0 2451 0 0 0
    cpu1 353819 143684 136582 2387421 589 0 1913 0 0 0
    intr 16591367 3 19561 0 0 0 0 0 0 1 0 0 0 1033239 0 0 0 360062 318044 40 343791 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1154266 0 0 15434 5315 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 28277855
    btime 1598774265
    processes 117139
    procs_running 1
    procs_blocked 0
    softirq 9953753 74 4098860 4860 347201 336159 0 26182 2177955 0 2962462
    wbyq@wbyq:/mnt/hgfs/linux-share-dir/linux_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;
    }
    

    三、ubuntu18.04下运行效果

    四、redhat6.3系统上运行效果

     

    展开全文
  • Linux系统下将cpu、内存等信息获取并放在同一个文件中的C++源码,需要g++才能编译
  • linux通过c语言获取系统运行时间uptime linux获取系统运行时间,可以通过cat /proc/uptime查看,本示例获取出来的为秒值 示例代码: #include <stdio.h> #include <sys/sysinfo.h> long get_linux...
  • linuxC语言实现CPU利用

    万次阅读 2014-10-09 08:54:49
    本来就是想通过写个小程序测试CPU利用率从而可以检验其他的工具性能之类的数据,后来参照IPbench中的cpu_target_lukem插件实现我们的功能,原理很简单:就是我们给程序设置了极低的优先级,如果有任何计算任务都会...
  • 获取系统cpu使用率(linux C)typedef struct cpu_occupy_ //定义一个cpu occupy的结构体{char name[20]; //定义一个char类型的数组名name有20个元素unsigned int user; //定义一个无符号的int类型的userunsigned int ...
  • proc文件系统使用

    2021-01-11 00:11:45
    以超级用户身份登录linux系统,并进入/proc目录,输入ls命令,查看该目录下的内容,同时查看每个文件的读写权限 (1)请回答下列问题: CPU的类型和型号 所使用Linux版本 从启动到当前时刻经过的时间 当前的...
  • 小编典典您需要从中解析出数据/proc//stat。这些是前几个字段(来自Documentation/filesystems/proc.txt内核源代码):Table 1-3: Contents of the stat files (as of 2.6.22-rc3)......................................
  • CPU利用率:top /proc/stat 内存使用率:top – sysinfo 硬盘占用率:df (disk free) 还要想想 – fstatfs/statfs 系统调用 先从 CPU 利用率着手,这三项数据都已经封装了现有的指令中
  • linux平台下,读取/proc/cpuinfo获取CPU信息demo
  • 自己学习《APUE》时写的linux下一些命令(大概40个左右)实现,仅当学习使用,这些命令包括cat cp echo head ls paste rmdir tail umask who chattr cut expand join mkdir pwd sed tee uniq chgrp date find last ...
  • 您需要从/proc//stat..这些是最初的几个字段Documentation/filesystems/proc.txt在您的内核源代码中):Table 1-3: Contents of the stat files (as of 2.6.22-rc3)...................................................
  • 一、实验题目Linux操作系统C语言使用二、实验课时2课时。三、实验目的:熟悉Linux操作系统c语言使用。四、实验内容学习Linux环境下gcc的使用;观察进程运行情况和CPU工作情况;五、实验步骤:1、屏幕编辑...
  • #include <string.h> #include <... char cpu[5]; long int user, nice, sys, idle, iowait, irq, softirq; long int all1, all2, idle1, idle2; float usage; //CPU Occupancy rate fp =
  • Linux文件系统详解

    万次阅读 多人点赞 2019-05-29 16:07:53
    从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储结构、不同存储介质的区别(RAM、ROM、Flash)、存储节点inode。本文参考: http://blog.chinaunix.net/uid-8698570-id-1763151.html ...
  • proc文件系统

    千次阅读 2015-04-17 14:45:51
    proc文件系统是一个虚拟的文件系统用使用man proc命令上对proc的描述来说就是一个伪文件系统,它提供了一些内核数据结构的接口。通常该文件系统被挂载在/proc目录下,通常情况下他是只读的,但是一些文件也允许...
  • Linux 中用c++实现线程绑定CPU

    千次阅读 2022-03-07 19:46:25
    嵌入式里面我们会使用到多核的cpu,随着产品芯片性能提升,我们也会有很多功能,以及很多进程产生运行,这个时候我们在任务调度调优的时候,把一些进程绑定到固定cpu运行,下面就来分享一下cpu绑定运行的过程: ...
  • 通过读取/proc/cpuinfo获取CPU信息

    万次阅读 2017-07-13 17:53:11
    本文从“什么是/proc文件系统”,“如何从cpuinfo文件获取cpu信息”“实验结果”三个方面展开阐述。2.什么是/proc文件系统?/proc文件系统是一种内核和内核模块用来向进程(process)发送消息的机制,可以让用户能够...
  • Linux第五次试验:Linux文件系统管理编程前前言前言一、实验目的二、实验工具与设备三、实验预备知识四、实验内容和步骤四、实验代码及步骤截图 前前言 别问我为啥Linux没有实验四,我们老师只给了我们实验一、二、...
  • 该信息整理自网上,需要进一步学习和确认cat /proc/cpuinfo 可以查看cpu个数getconf LONG_BIT 查看是32位还是64位例如:cat /proc/cpuinfoprocessor : 0vendor_id : AuthenticAMDcpu family : 15model : 65model ...
  • 2010-03-03 10:55linux 用C语言获得CPU的占用率#include #include #include //头文件 struct occupy //声明一个occupy的结构体 { char name[20]; //定义一个char类型的数组名name有20个元素 unsigned int user; //...
  • 查看逻辑CPU个数:#cat /proc/cpuinfo |grep "processor"|sort -u|wc -l24查看物理CPU个数:#grep "physical id" /proc/cpuinfo|sort -u|wc -l2#grep "physical id" /proc/cpuinfo|sort -uphysical id : 0physical ...
  • #include #include#include#include#define MAXBUFSIZE 1024#define WAIT_SECOND 3 //暂停时间,单位为“秒”typedefstructoccupy{char name[20];unsignedintuser;unsignedintnice;unsignedintsystem;...} CPU_O...
  • Linux系统中,一切都可以通过命令行命令来控制。 从小任务到大任务,您都可以找到一个简单的命令来完成您的工作。如果您是 Linux 新手,并且对系统管理感兴趣,那么您需要对命令行有扎实的了解。在本文中,我们将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,369
精华内容 3,747
关键字:

linux利用proc文件系统输出cpu名称用c语言实现