Linux如何获取进程在物理内存中的所有内容?当进程在内存中的内容发生变化时,又如何获知?内核中实现 60

 我来答
152******61
2013-03-30 · TA获得超过813个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:104万
展开全部
/proc/meminfo 不能反映每个进程的内存使用
这些东西只在/proc/xxxx/下的statm maps memmap 里有体现
你只需要查看这些虚拟文件在linux内核的实现即可

例如cat /proc/1/statm ,出来的7组数据里,第二组就是进程1的物理内存使用量,单位是当前内核的PAGE_SIZE
具体说明详见 Documentation/filesystems/proc.txt

具体实现就是fs/proc/array.c 下的

C/C++ code?123456789101112131415int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task){ unsigned long size = 0, resident = 0, shared = 0, text = 0, data = 0; struct mm_struct *mm = get_task_mm(task); if (mm) { size = task_statm(mm, &shared, &text, &data, &resident); mmput(mm); } seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n", size, resident, shared, text, data); return 0;}
这个函数改成你需要的结果,只有一个难点,就是根据pid得到对应的 task_struct。
不知道有没现成的api。遍历查找一下全局 task_struct链表应该不难解决
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
快又稳
2024-10-28 广告
在Linux环境下配置基于域名的虚拟主机,需安装Apache或Nginx等Web服务器,并编辑配置文件。以Apache为例,需创建虚拟主机配置文件,指定域名、文档根目录等,然后启用该配置文件并重启Apache服务。同样,Nginx也需在相应... 点击进入详情页
本回答由快又稳提供
isolarhuang
2013-04-16 · 超过18用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:25.9万
展开全部
在驱动程序中可以 用内存映射 phy 映射陈viraddr
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式