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

Mar*_*tin 5 c linux memory fork

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

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

R..*_*R.. 5

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