ipcs не показывает мою общую память и семафоры

Я открываю общую память и семафоры с соответствующими флагами:

sem = sem_open("/some_name", O_CREAT | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO, 1);
shm = shm_open("/other_name", O_RDWR | O_CREAT | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO);

Звонки не терпят неудачу (я проверяю их) и действительно один процесс, который fork/execs другие процессы создают их, а другие процессы разделяют память и семафоры, и происходит надлежащая синхронизация.

Когда я использую ipcs Команда, однако, я не вижу ни общей памяти, ни семафора. Это почему? Если они не появляются с ipcsгде я могу их проверить?


В моем ipcs выходные данные У меня нет записей в списке массивов семафоров, а те, которые находятся в разделяемой памяти, связаны со Skype, Firefox и Plugin-container (Firefox). Я проверил их с

grep shmid /proc/*/maps     # observe pid
readlink /proc/pid/exe

1 ответ

Решение

Одно решение, которое я только что нашел, состояло в том, что общая память и общие семафоры перечислены в списке:

/dev/shm

Файлы там полезны для того, чтобы узнать, какие существуют общие объекты, и, возможно, unlink их, но они не предоставляют никакой полезной информации помимо этого (как ipcs делает).

Ipcs сообщает только об общей памяти System V. Вы должны использовать разделяемую память Posix. Видимо это два совершенно разных механизма. Posix shm отображается в /dev/shm.

У меня была такая же проблема, и принятый ответ не достаточно удовлетворительный, поскольку он не объясняет, почему это происходит. Я нашел ответ в другом похожем вопросе: я не вижу разделяемую память, созданную boost::interprocess через команду оболочки ipcs

"Насколько мне известно, ipcs сообщает только об общей памяти System V. Совместная память POSIX - это отдельная область, и ее нужно запрашивать отдельно. В системах Linux проверьте / dev / shm".

В моем случае решение заключалось в использовании sudo:

sudo ipcs -m
Другие вопросы по тегам