ssh*_*980 7 kernel virtual-memory
我想查看内核为我的进程之一管理的分页表。在我的情况下,PID 4680 映射到dhclient. 因此,为了查看页表,我尝试了以下操作:
sudo cat /proc/4680/pagemap
Run Code Online (Sandbox Code Playgroud)
然而,这个命令只是挂在我的 Ubuntu 14.04 上,没有任何输出。我试过等待 2 分钟,然后不得不杀死它。
有没有更好的方法来做到这一点?
小智 8
根据文档,/proc/PID/pagemap每个虚拟页面包含一个 64 位值。
有了 4096 字节的页面和 64 位的虚拟地址空间,就有了2**52页面。所以整个pagemap文件将是2**52每个 8 字节的条目。那是一个非常大的文件。整件事要花很长时间。不是2分钟。真是好久不见。在我自己的计算机上进行的速度测试表明大约 21 年。
它主要用零填充(对于未在进程中映射的所有虚拟地址)。一堆\0输出到终端不会造成明显的影响。它没有挂起,它正在按照您的要求进行操作。
它不是一个文本文件,因此不为零的条目在您的终端上看起来也不太可能。
使用页面映射文件的正确方法是知道您要查找的虚拟地址、寻找它并读取 8 个字节。或者,如果您需要某个范围的信息,请读取一些 8 字节的倍数。如果您想要所有非零条目,请先阅读/proc/PID/maps以查找映射的范围。
| 归档时间: |
|
| 查看次数: |
6642 次 |
| 最近记录: |