我正在从事大学任务,主要基于IPC和共享内存。问题是,作为C的完整菜鸟,我一直在愉快地测试我的应用程序(显然使用shmget
和shmat
)几个小时。正如你可能猜到的那样,我自己并没有清理过,现在我无法运行我的应用程序,因为(我认为)shmget
无法再分配资源。
我的问题是:如何在不重新启动OSX的情况下获取此资源,是否有可用于监视/管理我正在创建的共享内存的GUI工具?
答案 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则经过认证。)