我通过在 OS X 中使用 shm_open/mmap 分配共享内存段来在父进程和多个子进程之间共享内存。父进程或子进程都可以创建该段,然后将标识名称传达给任何一方。我的理解是,当父级退出清理内存时,必须在每个段上调用 shm_unlink,否则共享内存会永久泄漏。
我最初从阅读文档中想到的是,当没有映射的进程处于活动状态时,共享段会被清理。然而实验表明情况并非如此,必须有人明确地使用 shm_unlink。
OS X 中有没有办法列出所有当前存在的共享内存段?问题是父母可能会崩溃,因此没有机会调用 shm_unlink。在 Linux 中,我的解决方案是清除 /dev/shm,但在 OS XI 中需要某种方式列出打开的共享段。