Есть ли какой-либо способ, специфичный для linux или нет, чтобы сегменты разделяемой памяти posix (полученные с помощью shm_open()
) удалялись, когда ни один процесс не использует их. то есть подсчитать их ссылку и удалить их, когда эталон становится 0
Несколько примечаний:
-
Установление обработчика atexit для их удаления не работает, если программа сработает.
-
В настоящее время, специфический для Linux способ, я вставляю pid в название сегмента и пытаюсь найти неиспользуемые сегменты, ходя /dev/shm во внешней программе. Который имеет недостаток в необходимости периодически очищать их извне довольно хакерским способом.
-
Поскольку программа может запускать несколько копий, использование четко определенного имени для сегмента, которое программа повторно использует при запуске, не представляется возможным.