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如何获取进程在物理内存中的所有内容?当进程在内存中的内容发生变化时,又如何获知?内核中实现的主要内容,如果未能解决你的问题,请参考以下文章

如何查看 进程内存使用情况 linux

linux内存池能分配连续物理内存吗

Linux - 用户态内存映射 和 内核态内存映射

Linux下实现脚本监测特定进程占用内存情况

linux 下如何查看服务器物理内存状况

Linux 如何知道一个进程使用了​​多少物理内存?