在Linux中如何以及何时移除共享内存备份文件?

我正在使用shm_open()mmap()的组合为IPC创build共享内存段。 我想知道的是如何清理后备文件(在我的系统中的/dev/shm ,Linux内核2.6.31)。

我的问题有三个方面:

1)终止时,文件是否是stream程的责任? 如果是这样的话,如果这个过程在解除链接之前死亡了呢?

2)由于我怀疑#1的答案是“是的,这是程序的责任”,我的程序是否认为它是“良好的做法”,在创build新文件之前删除它注意到的任何陈旧的文件,以防先前实例死亡?

3)有没有办法让内核在最后一个进程取消内存后删除后备文件? 我想在SysV样式共享内存中类似于shmctl(id, IPC_RMID, ...)的东西。

答案如下:

  1. 是的,这是程序的责任,虽然有可能确保清理,请参阅我的答案3。

  2. 你可以删除陈旧的文件,你也可以使用现有的共享内存对象(我假设你将重新创建)。

  3. 如果您知道最初创建后没有其他共享部分的用户存在,则可以在映射共享内存之后使用shm_unlink 。 一旦所有用户取消映射(关闭),内存区域将被释放。