ipcs不显示我的共享内存和信号量

5

我使用适当的标志打开共享内存和信号量:

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/exec其他进程创建了它们,其他进程共享内存和信号量,并且有适当的同步。但是,当我使用ipcs命令时,我却看不到共享内存和信号量。为什么呢?如果它们在ipcs中没有显示,我应该在哪里检查它们呢?
在我的ipcs输出中,信号量数组列表中没有任何条目,而共享内存中的条目与skype、firefox和firefox的插件容器相关。我已经用以下命令检查过它们:
grep shmid /proc/*/maps     # observe pid
readlink /proc/pid/exe
3个回答

5

我刚刚找到的一个解决方案是将共享内存和共享信号量列在以下位置:

/dev/shm

那里的文件有助于了解有哪些共享对象,也许可以使用 unlink 删除它们,但除此之外它们并没有提供任何有用的信息(就像 ipcs 那样)。

5

Ipcs 只报告 System V 共享内存,而您必须使用 Posix 共享内存。显然这是两种完全不同的机制。 Posix shm 在 /dev/shm 下显示。

我遇到了同样的问题,而已被接受的答案并不能让人满意,因为它没有解释为什么会发生这种情况。我在另一个类似的问题中找到了答案: i cannot see the shared memory created by the boost:: interprocess via shell command ipcs

“据我所知,ipcs 仅报告 System V 共享内存。 POSIX 共享内存是一个单独的区域,必须单独查询。在 Linux 系统上,请检查 /dev/shm。”


-1
在我的情况下,解决方案是使用sudo

sudo ipcs -m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接