繁体   English   中英

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

[英]What is the lifetime of shared memory on Linux

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

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

我原本预计,当共享一个段的最后一个进程执行shmdt时,该段将是空闲的。

我可以依靠这种行为吗? 或者它类似于在free()之后继续使用指针?

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

语义与文件非常相似。 shmat就像open一样。 shmdt就像close ,[上面] shmctl就像unlink

如果你关闭一个文件,你会希望它一直存在,直到被特别删除,不是吗? 因此,共享内存段的运行方式类似

shmdt只会分离内存,不会对数据段执行擦除/覆盖。 在某些其他流程映射并再次使用它之前,数据将持续存在。

此外,您应该使用更新的,符合POSIX标准的mmap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM