【问题标题】:Cleaning semaphores in Mac OS X在 Mac OS X 中清理信号量
【发布时间】:2011-11-16 10:59:27
【问题描述】:

我有一个程序没有清理一些信号量,因此如果我运行它几次,程序就会出现段错误。我曾经在linux中使用以下命令来清理它们。

ipcs -s | grep root |grep 666| cut -f2 -d' ' | xargs -I {} sudo ipcrm -s {}

但这在 mac 上不起作用。我应该使用什么命令来解决 mac osx 中的这个问题?

【问题讨论】:

  • 理想情况下,我建议您修复导致信号量保持打开状态的错误,但是为了回答这个问题,您能否在 mac os x 上提供“ipcs -s”的输出系统?

标签: linux macos command-line semaphore


【解决方案1】:

某些系统似乎会在输出中的字段之间添加额外的空格,因此您可能需要指定第三个字段:

ipcs -s | grep root |grep 666| cut -f3 -d' ' | xargs -I {} sudo ipcrm -s {}

我认为这只是一个短期解决方案。

【讨论】:

    【解决方案2】:

    我在处理一些 C 代码时遇到了同样的问题,因此我编写了一个简单的 C 程序来按名称删除信号量。

    代码如下:

     #include <semaphore.h>
     #include <stdio.h>
     #include <errno.h>
    
     int main(int argc, char *argv[]) {
         for (int i = 1; i < argc; i++) {
             if (sem_unlink(argv[i]) != 0) {
                 fprintf(stderr, "%s: ", argv[1]);
                 perror("");
             }
         }
     }
    

    编译后,您可以从带有信号量名称列表的终端调用程序,以便像这样删除:

    $ ./semrm <name_1> <name_2> ... <name_n>
    

    假设可执行文件名为 semrm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多