首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS共享内存清理

OS共享内存清理
EN

Stack Overflow用户
提问于 2013-09-17 16:36:08
回答 2查看 2.9K关注 0票数 5

我通过在OS中使用shm_open/mmap分配共享内存段,在父进程和多个子进程之间共享内存。我的理解是,父级必须在每个段上调用shm_unlink,否则共享内存就会永久泄漏。

在阅读文档时,我最初的想法是,当没有一个具有映射的进程存在时,共享段就会被清理。然而,实验表明情况并非如此,必须有人显式地使用shm_unlink。

在OS中有任何方法来列出当前所有现有的共享内存段吗?,问题是父程序可能崩溃,因此没有机会调用shm_unlink。在Linux中,我的解决方案是清除/dev/shm,但在OS中,我需要某种方式列出打开的共享段。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-29 08:52:04

答案似乎是:你不能。

首先,请参阅这个问题,它引用了内核中的一个注释:

  • TODO: (2)需要通过sysctl将数据导出到userland工具。ipcs(1)和ipcrm(1)应该扩展,还是应该编写新的工具来管理POSIX内核信号量和POSIX共享内存?

还可以在Apple邮件列表unix移植上看到这个帖子

代码语言:javascript
复制
There is no "picps"/"picprm" utility, you are expected to remember what 
you create and clean up afterward, or clean up first thing on 
restart if you crash a lot, there is nothing exposed directly 
in the filesystem namespace, and you are expected to do 
the shm_unlink because it is a rendezvous for potentially a 
lot of unrelated programs.
票数 3
EN

Stack Overflow用户

发布于 2014-03-03 17:45:20

希望你能解决你的问题。您可以使用ipcs -a并在NATTCH的标题下查看共享内存。该值将告诉您有多少共享内存段附加到特定的id。

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

https://stackoverflow.com/questions/18855230

复制
相关文章

相似问题

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