Управление общей памятью в C на OSX - PullRequest
3 голосов
/ 25 ноября 2010

Я работаю над университетским заданием, основанным в основном на IPC и общей памяти.Проблема заключается в том, что, будучи полным новичком в C, я с удовольствием тестировал свое приложение (которое использует shmget и shmat, очевидно) несколько часов.Как вы, наверное, догадываетесь, я не убирал за собой, и теперь я не могу запустить свое приложение, потому что (я предполагаю) shmget не могу больше выделять ресурсы.

Мой вопрос: какя могу вернуть этот ресурс без перезапуска OSX, и есть ли инструмент с графическим интерфейсом или что-то, что я могу использовать для мониторинга / управления этой общей памятью, которую я создаю?

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Возможно, немного поздно, но для этого есть инструменты cmdline.ipcs и ipcrm

смотрят их справочные страницы.

1 голос
/ 25 ноября 2010

Вызов 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 сертифицирован против него.)

...