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