Linux如何获取进程在物理内存中的所有内容?当进程在内存中的内容发生变化时,又如何获知?内核中实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux如何获取进程在物理内存中的所有内容?当进程在内存中的内容发生变化时,又如何获知?内核中实现相关的知识,希望对你有一定的参考价值。
参考技术A /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链表应该不难解决 参考技术B 在驱动程序中可以 用内存映射 phy 映射陈viraddr
以上是关于Linux如何获取进程在物理内存中的所有内容?当进程在内存中的内容发生变化时,又如何获知?内核中实现的主要内容,如果未能解决你的问题,请参考以下文章