Linux proc文件系统杂记

本文主要探讨了Linux proc文件系统中与CPU占用率相关的文件,包括/proc/stat用于查看系统总体CPU占用,/proc/pid/stat提供进程级CPU信息,以及/proc/pid/task/tid/stat详细展示每个线程的CPU使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、cpu占用率相关

1. 系统总体cpu占用

/proc/stat

示例输出:

[root@test]# cat /proc/stat 
cpu  166709 34158 278899 243448347 302989 0 345 0 0 0
cpu0 84510 17883 137112 121703575 152650 0 304 0 0 0
cpu1 82199 16274 141787 121744771 150338 0 41 0 0 0
intr 75906613 128 3 0 0 1145 0 3 0 1 0 0 0 5 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10721640 10872206 50816463 1 969791 20 519 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 61301504
btime 1463641857
processes 2841411
procs_running 1
procs_blocked 0
softirq 71894122 0 9598905 245185 50867002 970583 0 1 4522038 39180 5651228


具体函义,可以查看内核源码。下面是从top命令的源码top.c中摘出的一点代码。也可以看出一些函义。

    file = fopen("/proc/stat", "r");  
    fscanf(file, "cpu  %lu %lu %lu %lu %lu %lu %lu", &new_cpu.utime, &new_cpu.ntime, &new_cpu.stime,  
            &new_cpu.itime, &new_cpu.iowtime, &new_cpu.irqtime, &new_cpu.sirqtime); 

2. 每个进程的cpu占用

/proc/pid/stat

示例输出

[root@test]# cat /proc/12/stat
12 (rcuos/0) S 2 0 0 0 -1 2129984 0 0 0 0 0 3161 0 0 20 0 1 0 2 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744071579888989 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0

下面是从top命令的源码top.c中摘出的一点代码。也可以看出一些函义。

    /* Split at first '(' and last ')' to get process name. */  
    open_paren = strchr(buf, '(');  
    close_paren = strrchr(buf, ')');  
    if (!open_paren || !close_paren) return 1;  
  
    *open_paren = *close_paren = '\0';  
    strncpy(proc->tname, open_paren + 1, THREAD_NAME_LEN);  
    proc->tname[THREAD_NAME_LEN-1] = 0;  
      
    /* Scan rest of string. */  
    sscanf(close_paren + 1, " %c %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d "  
                 "%lu %lu %*d %*d %*d %*d %*d %*d %*d %lu %ld",  
                 &proc->state, &proc->utime, &proc->stime, &proc->vss, &proc->rss);  



3. 每个线程的cpu占用

/proc/pid/task/tid/stat

示例输出

[root@test]# cat /proc/12/task/12/stat
12 (rcuos/0) S 2 0 0 0 -1 2129984 0 0 0 0 0 3161 0 0 20 0 1 0 2 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744071579888989 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0

其格式与/proc/pid/stat格式相同


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值