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

时间:2013-03-27 14:02:44

标签: c linux shared-memory 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 / exec其他进程创建它们的一个进程,而其他进程确实共享内存和信号量适当的同步。

但是,当我使用ipcs命令时,我看不到共享内存和信号量。这是为什么?如果他们没有ipcs出现,我可以在哪里查看?


在我的ipcs输出中,我在信号量数组列表中没有任何条目,共享内存中的条目与skype,firefox和plugin-container(firefox)相关。我用

检查了它们
grep shmid /proc/*/maps     # observe pid
readlink /proc/pid/exe

3 个答案:

答案 0 :(得分:2)

我刚发现的一个解决方案是共享内存和共享信号量列在:

/dev/shm

那里的文件对于了解共享对象以及对unlink这些共享对象非常有用,但除此之外它们不提供任何有用的信息(如ipcs所做的那样)。

答案 1 :(得分:1)

Ipcs仅报告系统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。”

答案 2 :(得分:0)

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

sudo ipcs -m