【发布时间】:2025-12-07 05:05:02
【问题描述】:
当我有多个进程在使用共享内存时,我将它们全部分离,但只有一个。
- 在使用
shmctl()(与该进程)删除共享内存之前分离最后一个进程是否有意义? - 如果没有意义,是否可以在与共享内存分离后将其删除?
【问题讨论】:
-
我实际上并不知道这一点,而且 POSIX 规范似乎并没有说这两种方式,但我会期望这种方式工作是共享内存段上的
shmctl(..., IPC_RMID, ...)对任何附加它的进程没有任何影响。该段应保持分配状态并可供这些进程访问,直到它们全部退出或分离它。如果我是对的,那么您的问题的答案是“没关系,您可以按任意顺序进行操作,整体效果都是一样的。” -
(请注意,shm_unlink 被明确指定为我所说的我希望
shmctl(..., IPC_RMID, ...)的行为方式——这表明这是 Unix 系统接口的正常情况,并且它可能不是 SysV IPC 的行为总是有点怪异。) -
有争议的重复:*.com/questions/13939349/…(但答案引用了 Linux 联机帮助页而不是 POSIX,所以我认为我们还没有关于可移植代码的答案。)