如何在C中的分叉进程中查找共享/复制的内存页面

时间:2011-07-28 15:31:21

标签: c linux memory fork

我有一个Linux服务器进程,可以在启动时加载大量资源。此进程将根据请求进行分叉。启动时加载的资源是bigest资源,在运行时不会更改。常用子进程使用读/写控制结构来处理对常量资源的请求。

如何确定进程之间共享多少内存以及每个进程有多少内存?或者由于来自任何进程的写访问权限而重复哪些页面?

1 个答案:

答案 0 :(得分:5)

您可以从proc文件系统中的/proc/$pid/pagemap/proc/kpagecount以及/proc/kpageflags虚拟文件中获取此信息。对后者的访问需要root,因为它可能泄漏有关您不拥有的进程内存映射的特权信息。请阅读内核文档中的Documentation/vm/pagemap.txt以获取有关数据格式的详细信息。