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

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

/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链表应该不难解决

当然可以。

方法:

工具/原料:

Linux version 3.19.0-15-generic Ubuntu 4.9.2-10ubuntu13

方法/步骤

1/4分步阅读

第一种方法:/proc/meminfo

>>/proc文件夹中的meminfo文件可以提供内存信息。

2/4

>>cd /proc 进入/proc文件夹

3/4

>>dir可以看到该文件夹中的meminfo文件

4/4

>>more meminfo查看该文件的内容。

PS:Linux是一套免费使用和自由传播的类Unix *** 作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的 *** 作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络 *** 作系统。

分享一些在Linux中,查看内存信息的命令,不明觉厉,希望以后用的到

1. 查看内存插槽数,已使用插槽数,每条内存多大

sudo dmidecode|grep -P -A 5 "Memory/s+Device" | grep Size|grep -v Range

2.%20支持的最大内存容量

sudo%20dmidecode%20|%20grep%20-P%20'Maximum/s+Capacity'

公司的电脑居然只支持4G,,本来还想申请根4G的内存条呢。

3. 查看内存频率

sudo dmidecode | grep -A16 "Memory Device"|grep 'Speed'


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7542805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存