shm_open(3)
на Linux полагается на tmpfs
, обычно установленный под /dev/shm
. То, что shm_open()
делает, состоит в том, чтобы преобразовать имя объекта в путь к файлу, добавив его с точкой монтирования файловой системы tmpfs
. Пока объект разделяемой памяти не отсоединил, он будет виден в файловой системе и все, что вам нужно сделать, это выдать простую команду: ls
$ ls /dev/shm
pulse-shm-1 pulse-shm-2 pulse-shm-3
...
Некоторые дистрибутивы Linux имеют tmpfs
установленный под другим монтирования. Для того, чтобы выяснить, где проблема:
$ mount -t tmpfs
tmpfs on /dev/shm type tmpfs (rw)
Если вы хотите знать, какой (ы) процесс имеет/имеют отображенные общие объекты памяти, команда lsof
является вашим другом:
$ lsof /dev/shm
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kded4 30657 hristo mem REG 0,16 67108904 294877 /dev/shm/pulse-shm-1
kded4 30657 hristo mem REG 0,16 67108904 294868 /dev/shm/pulse-shm-2
knotify4 30687 hristo mem REG 0,16 67108904 294876 /dev/shm/pulse-shm-3
pulseaudi 30717 hristo mem REG 0,16 67108904 294868 /dev/shm/pulse-shm-4
shm.x 31878 hristo DEL REG 0,16 305893 /dev/shm/asd
Unlinked совместно объекты больше не видны в файловой системе, хотя они могут по-прежнему сохраняться при сопоставлении каким-либо процессом, как в случае с последним процессом в списке выше - DEL
в поле FD
означает, что соответствующий файл был удален.
Обратите внимание, что сегменты разделяемой памяти системы V (полученные ipcs -m
) живут в другом пространстве имен и не имеют соответствующих имен объектов, а всего лишь цифровых клавиш.
Можете ли вы попробовать 'ipcs -a'? ('-m' - только для общей памяти). –
@ElliottFrisch: Здесь перечислены сегменты, но не имя, связанное с каждым. –