Linux系统下利用C程序输出某进程的内存占用信息
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,前言大家应该都遇到过一种情况,在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统 /proc 计算某进程内存占用的程序实现方法.下面话不多说了,来
千家信息网最后更新 2026年11月02日Linux系统下利用C程序输出某进程的内存占用信息
前言
大家应该都遇到过一种情况,在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统 /proc 计算某进程内存占用的程序实现方法.下面话不多说了,来一起看看详细的介绍吧。
实现分析
首先, 为什么会有所谓的 伪文件 呢. Linux系统的文件类型大致可分为三类: 普通文件, 目录文件和伪文件. 伪文件不是用来存储数据的, 因此这些文件不占用磁盘空间, 只是存在于内存中. /proc 让你可以与内核内部数据进行交互, 获取有关进程的有用信息.
下面主要介绍一下 /proc 下面的四个文件: /proc/stat , /proc/meminfo , /proc/ , /proc/ .
/proc/stat 存放系统的cpu时间, 该文件包含了所有cpu活动的信息.
cpu 72389 2891 16811 1148664 31374 0 67 0 0 0cpu0 17608 452 3786 288899 6210 0 30 0 0 0cpu1 18724 926 4598 285844 8911 0 15 0 0 0cpu2 16803 658 3726 288710 7220 0 7 0 0 0cpu3 19254 855 4700 285209 9032 0 13 0 0 0.........
/proc/meminfo 存放系统的内存信息, 通过文件中各个变量的名字便可知其代表的信息.
MemTotal: 4046236 kBMemFree: 1054440 kBMemAvailable: 2460060 kBBuffers: 359688 kBCached: 1158056 kBSwapCached: 0 kBActive: 2020096 kBInactive: 677948 kBActive(anon): 1181376 kB.........
/proc/ 存放某个进程的cpu信息
2476 (firefox) S 1773 1910 1910 0 -1 4210688 3413511 1712 757 1 45466 4629 2 7 20 0 57 0 20381 1774743552 150565 18446744073709551615 94844693012480 94844693126372 140732961864784 140732961858304 139747170914269 0 0 4096 33572079 0 0 0 17 2 0 0 1178 0 0 94844695226592 94844695228536 94844713955328 140732961867643 140732961867668 140732961867668 140732961869791 0
/proc/ 存放某个进程的cpu信息以及一些综合信息
Name: firefoxState: S (sleeping)Tgid: 2476Ngid: 0Pid: 2476PPid: 1773TracerPid: 0Uid: 1000 1000 1000 1000Gid: 1000 1000 1000 1000FDSize: 256Groups: 4 24 27 30 46 108 124 1000 NStgid: 2476NSpid: 2476NSpgid: 1910NSsid: 1910VmPeak: 1722812 kBVmSize: 1690920 kBVmLck: 0 kBVmPin: 0 kBVmHWM: 684048 kBVmRSS: 600324 kBVmData: 993040 kBVmStk: 192 kB.........
以上数据都可以通过文件读取的方式来获取. 根据自己实验的需要可以计算相应的数据, 比如 pmem = VmRSS/MemTotal*100 等等.
示例代码
下面只是贴出一个简单的获取某进程当前时刻所占用的实际内存的c代码实现例子.
//get_mem.h#include#include #include #include #include #define VMRSS_LINE 21//VMRSS所在行, 注:根据不同的系统,位置可能有所区别.#define pid_t intint get_phy_mem(const pid_t p){ char file[64] = {0};//文件名 FILE *fd; //定义文件指针fd char line_buff[256] = {0}; //读取行的缓冲区 sprintf(file,"/proc/%d/status",p); fprintf (stderr, "current pid:%d\n", p); fd = fopen (file, "r"); //以R读的方式打开文件再赋给指针fd //获取vmrss:实际物理内存占用 int i; char name[32];//存放项目名称 int vmrss;//存放内存 //读取VmRSS这一行的数据 for (i=0;i 测试文件:
#include "get_mem.h"int main(){int list[1024];for(int i = 0; i < 1024; i++) list[i] = i;int mem = get_rmem(getpid());}总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
文件
内存
信息
进程
数据
系统
指针
实际
方式
程序
一行
代码
内容
只是
名称
大小
情况
文件名
缓冲区
项目
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
互联网科技公司排名
互联网科技工作委员会毛军
互联网巨头反垄断金融科技
北京互联网科技公司
互联网科技的英文
菲比寻常互联网科技
深圳期待互联网科技
深圳卡尔迅互联网科技有限公司怎么样
恒银科技与互联网金融
创业天下互联网科技有限公司
互联网科技公司实习生
富国互联网科技002692
上海创道互联网络科技有限公司
本届互联网大会上的黑科技
江苏互联网科技小贷
互联网科技包装股
美国五大互联网科技公司市值多少
瑞安市蟠桃会互联网科技有限公司
科技美学互联网 艺术
互联网科技公司简介
深圳恒合互联网络科技有限公司
互联网属科技
科技企业和互联网企业
上海喔噻互联网科技
互联网科技logo设计
云创客互联网科技公司
华服互联网科技官网
黑科技 体验场景 互联网大会
广州燕处互联网科技有限公司