我用适当的标志打开共享内存和信号量:
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
的其他进程创build了一个进程,其他进程共享内存和信号量,并且有适当的同步。
但是,当我使用ipcs
命令时,我看不到共享内存和信号量。 这是为什么? 如果他们没有出现ipcs
,我可以在哪里检查他们?
在我的ipcs
输出中,我没有信号量列表中的任何条目,并在共享内存中的与Skype,Firefox和插件容器(的Firefox)有关。 我检查了他们
grep shmid /proc/*/maps # observe pid readlink /proc/pid/exe
我刚刚发现的一个解决方案是共享内存和共享信号列在下面:
/dev/shm
那里的文件对于知道共享对象是有用的,也许可以将它们unlink
,但是除此之外,它们不提供任何有用的信息(就像ipcs
一样)。