在OSX上管理C中的共享内存

时间:2010-11-25 15:02:10

标签: c macos unix shared-memory

我正在从事大学任务,主要基于IPC和共享内存。问题是,作为C的完整菜鸟,我一直在愉快地测试我的应用程序(显然使用shmgetshmat)几个小时。正如你可能猜到的那样,我自己并没有清理过,现在我无法运行我的应用程序,因为(我认为)shmget无法再分配资源。

我的问题是:如何在不重新启动OSX的情况下获取此资源,是否有可用于监视/管理我正在创建的共享内存的GUI工具?

2 个答案:

答案 0 :(得分:3)

也许有点晚了,但是有一些命令行工具可以做到这一点。 ipcs和ipcrm

看看他们的手册页。

答案 1 :(得分:1)

在每个持有对它的引用的进程中,在共享内存段上调用shmdt(“共享内存分离”)。 Unix共享内存部分是引用计数的,因此当最后一个进程与它们分离时,可以使用shmctl(id, IPC_RMID, NULL)销毁它们。

从您的应用程序外部,我现在可以想到的唯一清除共享内存段的选项是:

for (int id=0; id < INT_MAX; id++)
    shmctl(id, IPC_RMID, NULL);

但这是一个非常低效的kludge。 (我也不确定它是否有效;它不适用于Linux,但Linux违反了Unix标准,而MacOS X则经过认证。)