2013-09-17 4 views
4

Я использую память между родительским процессом и несколькими дочерними процессами, выделяя сегменты разделяемой памяти с помощью shm_open/mmap в OS X. Любой родитель или дети могут создавать сегмент, а затем сообщать идентифицирующее имя. Я понимаю, что родитель должен вызывать shm_unlink на каждом из этих сегментов, когда он завершает работу в очистке памяти, в противном случае общая память постоянно просачивается.Очистка общей памяти OS X

То, что я изначально думал, прочитав документацию, состоит в том, что разделяемые сегменты очищаются, когда никакие процессы с ним не отображаются. Однако эксперименты показывают, что это не так, и кто-то должен явно использовать shm_unlink.

Есть ли способ в OS X перечислить все существующие сегменты разделяемой памяти? Проблема заключается в том, что родительский элемент может произойти сбой, и поэтому у него не будет возможности вызвать shm_unlink. В Linux мое решение состоит в том, чтобы очистить/dev/shm, но в OS X мне нужен какой-то способ опубликовать открытые общие сегменты.

ответ

3

Ответ кажется: вы не можете.

Во-первых, посмотреть question, который цитирует комментарий в ядре:

  • TODO:
    (2) Необходимо экспортировать данные в инструмент UserLand через SYSCTL. Должны ли быть расшифрованы ipcs (1) и ipcrm (1) или должны ли новые инструменты для управления семафорами ядра POSIX и общей памятью POSIX ?

Также смотрите post на Apple, список рассылки Unix-портирования:

There is no "picps"/"picprm" utility, you are expected to remember what 
you create and clean up afterward, or clean up first thing on 
restart if you crash a lot, there is nothing exposed directly 
in the filesystem namespace, and you are expected to do 
the shm_unlink because it is a rendezvous for potentially a 
lot of unrelated programs. 
0

Надеюсь, вы выясните свою проблему. вы можете использовать ipcs -a и посмотреть под заголовком «Общая память» для NATTCH. это значение скажет вам, сколько ребят привязано к определенному идентификатору.

+0

'ipcs' не будет показывать POSIX разделяемых сегментов памяти – TheNextman

Смежные вопросы