我使用适当的标志打开共享内存和信号量:
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
答案 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