首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ipcs的替代品

ipcs的替代品
EN

Stack Overflow用户
提问于 2013-07-24 14:33:48
回答 1查看 686关注 0票数 3

我有一个使用System共享内存段的应用程序。通常情况下,它在内部管理这些,没有人需要去触摸它们。但对于紧急情况,我们有一个实用程序,可以手动清除共享内存段。

问题是,为了做到这一点,它运行ipcs,并使用cut获取输出的块。那看起来很脆弱。它已经在不同的平台上运行了一些不同的命令,以反映在Linux / AIX / Solaris等上ipcs输出的格式化方式不同的事实。

有比解析ipcs输出更好的方法来找到共享内存段吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-29 11:51:22

您可以重新实现您自己版本的ipcs,它提供相同的输出,而不管操作系统是什么。这需要一些系统级的编程。

在Linux上,ipcs使用shmctl(0, SHM_INFO, ...)查找使用最多的共享内存段的索引,然后在从0到最高索引的所有索引上循环运行shmctl(index, SHM_STAT, ...),以获取关于每个段的信息。这也应该适用于FreeBSD (虽然在操作系统上ipcs使用sysctl来读取kern.ipc.shm*的值)(没有文档记录,但是从内核源代码中可以看出)。

在Solaris上,ipcs使用shmids(NULL, 0, &nids)获取段ID的数量,然后调用shmids(&ids, nids, ...)获取实际ID的列表,然后使用shmctl(id, IPC_STAT, ...)获取每个段的信息。

ipcs是一个相当古老的工具,人们不会期望它的输出在未来会发生很大的变化,至少在POSIX共享内存完全取代SysV IPC之前是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17837088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档