【问题标题】:ipcs doesn't show my shared memory and semaphoresipcs 不显示我的共享内存和信号量
【发布时间】:2013-03-17 15:35:49
【问题描述】:

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

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/execs 其他进程创建它们的一个进程和其他进程共享内存和信号量并且有适当的同步。

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


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

grep shmid /proc/*/maps     # observe pid
readlink /proc/pid/exe

【问题讨论】:

    标签: c linux shared-memory ipcs


    【解决方案1】:

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

    /dev/shm
    

    那里的文件对于了解有哪些共享对象很有用,也许对unlink 他们有用,但它们不提供除此之外的任何有用信息(就像ipcs 所做的那样)。

    【讨论】:

      【解决方案2】:

      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。”

      【讨论】:

        【解决方案3】:

        就我而言,解决方案是使用 sudo

        sudo ipcs -m
        

        【讨论】:

          猜你喜欢
          • 2010-10-27
          • 2013-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-27
          • 2010-10-26
          相关资源
          最近更新 更多