Ответ 1
Я смутно помню из своего UNIX (AIX и HPUX, я признаю, что я никогда не использовал разделяемую память в Linux), что удаление просто отмечает блок, который больше не может быть прикреплен новыми клиентами.
Он будет физически удален только в том случае, если к нему не подключено больше процессов.
Это то же самое, что и с обычными файлами, которые удалены, их информация о папке удаляется, но содержимое файла исчезает только после того, как последний процесс закрывает его. Иногда это приводит к журнальным файлам, которые занимают все больше места в файловой системе даже после их удаления по мере того, как процессы все еще пишут им, что является следствием "отрыва" между указателем файла (нулевые или более указательные записи в каталоге к inode) и содержимое файла (сам дескриптор).
Вы можете увидеть на своем выходе ipcs
, что 3 из 4 все еще имеют подключенные процессы, чтобы они никуда не денлись, пока эти процессы не отделились от блоков разделяемой памяти. Другой, вероятно, ждет некоторую функцию "sweep" для очистки, но это, конечно, будет зависеть от реализации разделяемой памяти.
Хорошо написанный клиент общей памяти (или файлы журнала, если на то пошло) должен периодически повторно присоединяться (или перекатываться), чтобы гарантировать, что эта ситуация является временной и не влияет на работу программного обеспечения.