Linux系统下利用C程序输出某进程的内存占用信息
发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,前言大家应该都遇到过一种情况,在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统 /proc 计算某进程内存占用的程序实现方法.下面话不多说了,来
千家信息网最后更新 2024年10月09日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安全错误
数据库的锁怎样保障安全
当前网络安全领域主要风险挑战
网络安全的主要风险
网络安全预算标准教育部
数据库中如何让使用快捷键
网络安全对照检查部队个人
静安区工程软件开发生产过程
网络安全工程师证书照片
高并发数据库连接池数量
从0开始搭建家用服务器
网络安全的模式匹配
云服务平台网络安全
nba技术数据库
软件开发专业技能培训协议
宁波北辰软件开发有限公司
河北文档软件开发平台
服务器的正常值是多少
网络安全等保资质查询
武汉微卷互联网科技有限公司
软件开发助教
电脑上怎么建ftp服务器
我的世界服务器附魔书价格
中堂设计软件开发
武汉培训机构数据库
三级网络技术考前选择题
数据库设计入门
网络安全理念需要和技术并行
网络安全与管理专业
2018年网络安全周的主体
gbase数据库开发
昆山专业软件开发口碑