Вызов shmdt
(«отсоединение общей памяти») в сегменте общей памяти в каждом процессе, который содержит ссылку на него. Разделы общей памяти Unix подсчитываются, поэтому, когда последний процесс отсоединяется от них, они могут быть уничтожены с помощью shmctl(id, IPC_RMID, NULL)
.
Из-за пределов вашего приложения единственная возможность, которую я могу сейчас себе представить, чтобы очистить ваши сегменты разделяемой памяти:
for (int id=0; id < INT_MAX; id++)
shmctl(id, IPC_RMID, NULL);
но это ужасно неэффективный клудж. (Я также не уверен, что это работает; это не работает в Linux, но Linux нарушает стандарт Unix, в то время как MacOS X сертифицирован против него.)