列出 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 上的本地计算机上进行进程间通信

查询Linux操作系统上进程的所有实例的总CPU使用率

Android跨进程通信-共享内存

Windows 中跨进程的共享内存是不是一致?

Java内存模型知识点小结---《深入理解Java内存模型》(程晓明)读书总结

如何打印Linux上进程拥有的所有线程的线程ID