我正在使用shm_open()
和mmap()
的组合为IPC创build共享内存段。 我想知道的是如何清理后备文件(在我的系统中的/dev/shm
,Linux内核2.6.31)。
我的问题有三个方面:
1)终止时,文件是否是stream程的责任? 如果是这样的话,如果这个过程在解除链接之前死亡了呢?
2)由于我怀疑#1的答案是“是的,这是程序的责任”,我的程序是否认为它是“良好的做法”,在创build新文件之前删除它注意到的任何陈旧的文件,以防先前实例死亡?
3)有没有办法让内核在最后一个进程取消内存后删除后备文件? 我想在SysV样式共享内存中类似于shmctl(id, IPC_RMID, ...)
的东西。
答案如下:
是的,这是程序的责任,虽然有可能确保清理,请参阅我的答案3。
你可以删除陈旧的文件,你也可以使用现有的共享内存对象(我假设你将重新创建)。
如果您知道最初创建后没有其他共享部分的用户存在,则可以在映射共享内存之后使用shm_unlink
。 一旦所有用户取消映射(关闭),内存区域将被释放。