列出 AIX5.3+ 上进程使用的所有共享内存段
Posted
技术标签:
【中文标题】列出 AIX5.3+ 上进程使用的所有共享内存段【英文标题】:Listing all shared memory segments used by a process on AIX5.3+ 【发布时间】:2010-01-22 13:52:40 【问题描述】:我想查找给定进程使用的所有共享内存段。我对找出 shmid 尤其感兴趣,因此我可以在调用 shmctl() 时使用它。
在 Solaris 上,我只需阅读 /proc/$PID/map 即可找出该信息(字段 pr_shmid)。 该文件的内容由 sys/procfs 中的 struct prmap_t 定义。
AIX 也有一个 /proc/$PID/map 文件。还有一个 struct prmap 但不幸的是它缺少 pr_shmid 字段。
有什么想法可以在 AIX5.3+ 上实现吗?
【问题讨论】:
【参考方案1】:我不特别了解 AIX,但我认为 ipcs
命令在支持 SysV IPC 的情况下是相当标准的,所以我希望 ipcs -m
命令能够提供适当的信息;如果找不到更好的方法,解析它的输出可能是一种选择。
【讨论】:
是的,恐怕我必须接受那个解决方案。我试图通过“truss”运行它来确定“ipcs -m”使用了哪些系统调用/库调用,但不幸的是,“ipcs”在 AIX 上是 setuid root ... 顺便说一句。要弄清楚谁创建了 shm 段,我需要调用“ipcs -mp”【参考方案2】:svmon -P 将按类型列出进程内存段。
您还可以使用 -S 来查看哪些 PID 附加到一个段。使用 -S,首先运行 ipcs -bmS,然后获取不带 0x 的 SID,并与
一起使用svmon -lS [SID]
这将返回附加的 PID。
【讨论】:
以上是关于列出 AIX5.3+ 上进程使用的所有共享内存段的主要内容,如果未能解决你的问题,请参考以下文章
使用 COM 在 Windows 上的本地计算机上进行进程间通信