use*_*970 12 c linux shared-memory
是否有任何方式,特定于Linux,shm_open()在没有进程使用它们时删除posix共享内存段(获取).即将它们引用计数并让系统在引用变为0时将其删除
几点说明:
如果程序崩溃,建立一个删除它们的atexit处理程序不起作用.
目前,以linux为特定方式,我将pid嵌入到段名中,并尝试通过在外部程序中遍历/ dev/shm来查找未使用的段.这有一个缺点,就是不得不以相当狡猾的方式定期清理它们.
由于程序可以运行多个副本,因此程序在启动时重用的段使用定义良好的名称是不可行的.
如果您的程序执行中有一个众所周知的点,即所有需要打开共享内存段的进程都已经这样做了,您可以安全地取消链接。取消链接会从全局命名空间中删除对象,但只要至少有一个进程保持其文件描述符打开,它就会一直存在。如果在那之后发生崩溃,文件描述符将自动关闭并且引用计数减少。一旦未链接的共享内存块的打开描述符不再存在,它就会被删除。
这在以下场景中很有用:一个进程创建一个共享内存块,取消链接,然后分叉。子进程继承文件描述符,可以使用共享内存块与父进程通信。一旦两个进程终止,当两个文件描述符都关闭时,块会自动删除。
未链接时,共享内存块不可用于其他进程打开它。同时,如果使用shm_open()与未链接块相同的名称,则会创建一个新的完全不同的共享内存块。
| 归档时间: |
|
| 查看次数: |
7259 次 |
| 最近记录: |