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安全错误
数据库的锁怎样保障安全
微服务服务器端和客户端
股票服务器异常怎么办
服务器的连接被重置什么意思
联想ts250服务器订做
ubisoft服务器在哪
福建双路机架服务器生产商
阜阳手机软件开发公司哪家好
mysql主从服务器
直播视频软件开发
cytoid为什么联系不到服务器
互联网科技企业驰援海外
建行 软件开发
pboot数据库
建立健全网络安全响应机制
深圳网络技术总监的工资
网络安全知多少500字
服务器可以玩跑酷吗
软件开发分为哪几个类别
魔域新开服务器冲站
基础应用类的服务器
网络安全是一个什么学科
阿里云服务器怎么挂机软件
kv数据库 查询
搞网络技术的什么最赚钱
幼儿园放假前网络安全教育
阜阳节能软件开发定制
网络安全公司领军者
dell服务器内存条区分
当今世界网络安全形势严峻
阿里云服务器电信无法连接