ipcs的替代品

asc99c

我有一个利用System V共享内存段的应用程序。通常,它在内部管理这些文件,而无需触摸它们。但是对于紧急情况,我们有一个实用程序可以手动清除共享内存段。

问题是要做到这一点,它会运行ipcs,并使用cut来获取输出的大块数据。那似乎很脆弱。它已经在不同平台上运行了稍有不同的命令,以反映ipcs输出在Linux / AIX / Solaris等上格式不同的事实。

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

赫里斯托(Hristo)离开“伊利耶夫(Iliev)”

您可以重新实现自己的版本,ipcs无论使用什么操作系统,都可以提供相同的输出。但是,这需要一些系统级编程。

在Linux上,ipcs使用shmctl(0, SHM_INFO, ...)找出使用最多的共享内存段的索引,然后shmctl(index, SHM_STAT, ...)在所有索引从0到最高索引的循环中运行以获取有关每个段的信息。这也应该在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之前,它的输出不会发生很大变化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章