【发布时间】:2013-03-14 03:49:51
【问题描述】:
我对@987654323@ 的 linux man pages 感到困惑。我使用以下命令:shmctl (id , IPC_RMID , 0) 删除共享段。 man pages 似乎与内存的生命周期相矛盾。
man pages 状态:
IPC_RMID
标记要销毁的段。该段只有在最后一个进程将其分离后才会真正被销毁(即,当 相关结构 shmid_ds 的 shm_nattch 成员为零)。这 调用者必须是所有者或创建者,或者是特权。如果一个段 已标记为销毁,然后是(非标准)SHM_DEST 标志 检索到的相关数据结构中的 shm_perm.mode 字段 由 IPC_STAT 设置。
如果我是正确的,我相信这意味着如果您有两个进程都附加到共享内存,(我们称它们为Process1 和Process2),Process1 可以创建共享内存,附加,分离,破坏共享内存,并最终终止。然后内存将仍然存在,直到Process2 也分离。
这对吗?
其次,man pages中的这句话是什么意思:
调用者必须确保一个段最终被销毁; 否则其出错的页面将保留在内存中或 交换。
这使它看起来像Process1,因为它标记了要删除的段,需要阻塞直到所有其他进程被分离,以确保内存被删除。但这似乎与上述说法相矛盾。我也不知道如何做到这一点(如果应该这样做的话),所以如果是这样的话,你能否解释一下我将如何去做。
【问题讨论】:
标签: c linux shared-memory