Linux 上共享内存的生命周期是多长

use*_*374 5 c c++ linux shared-memory

我正在使用 ftok/shmget/shmat/shmdt 函数在 Linux 上创建、写入和读取共享段。

如果我在一个程序中写入该段然后退出,然后稍后从另一个程序读取该段,我会惊讶地发现数据仍然存在。

我原以为当共享一个段的最后一个进程执行 shmdt 时,该段将被释放。

我可以依赖这种行为吗?还是类似于在 free() 之后继续使用指针?

Cra*_*tey 4

共享内存区域将一直保留,直到通过[或系统重新启动]删除为止shmctl(shmid,IPC_RMID,...)。这将在每个进程完成shmdt[或终止]后生效。

语义与文件非常相似。shmat就好像openshmdt就像close,[上面]shmctl就像unlink

如果您关闭一个文件,您希望它一直存在直到被专门删除,不是吗?因此,共享内存段的操作类似