最近在开发一个基于共享内存的跨平台数据缓存组件,核心思想是将数据存放在共享内存中以实现多进程间数据交换。在开发和调试过程中需要借助工具查看系统中的共享内存。本文记录了Linux和Windows下查看共享内存状态信息的方法。

Linux系统

使用 ipcs 能够查看系统中进程间交互所使用的共享资源。这个命令不仅能够查看共享内存信息,还能够查看Linux系统的消息队列(message queue)和信号量(semaphore)。

这个软件一般是随系统附带安装好的,直接在shell中输入命令即可使用。

查看所有的共享内存信息

ipcs -m

以上命令能够输出当前系统中的共享内存信息,包括共享内存的id、创建用户、访问权限、空间大小、连接数量和状态。结果以表格形式输出,十分直观。

查看某个共享内存信息

ipcs -m -i <shmid>

通过指定共享内存id,以上命令能够查看这个id对应共享内存的更详细信息,包括连接时间、断开连接时间等。

查看系统对共享内存的限制

ipcs -m -l

以上命令能够查看操作系统中共享内存的限制,包括共享内存的最大数量、单块共享内存的最大大小和最小大小、所有共享内存的总大小。

以列表的格式展示共享内存的详细信息

ipcs -m -c

以上命令能够列出所有的共享内存和它们对应的创建用户id、用户组id和所有者用户id和用户组id。结果以表格的形式展现出来,方面比较和查找。

ipcs -m -p

以上命令能够列出所有的共享内存和它们对应的所有者、创建进程id、最后访问进程id。结果以表格形式展现出来。

Windows系统

在Windows下可以借助accesschk程序获取共享内存信息,但是需要自己对结果进行筛选和分析,不如Linux那样方便。

使用以下命令能够将查询结果保存在 objects.txt 文件中。

accesschk.exe -osv > objects.txt

建议使用一个高级文本编辑器将其打开并搜索 Type: Section ,搜索结果对应的条目就是共享内存信息。在Windows下,共享内存被称作section(handle)。

目前从我的实践结果来看,能够从结果中找到 Type: Section 对应的条目。可以通过搜索共享内存的名字找到对应的共享内存,能够查到共享内存的访问权限等信息,但是无法获取共享内存的大小。

accesschk并不是windows的自带软件,需要额外下载,下载地址见文末的参考资料。acssesschk是一款便携绿色软件,下载后无需安装直接运行即可。