在Mac OS X中清理信号量

3

我有一个程序不能正确清除一些信号量,如果我运行它几次,程序将会出现段错误。我曾经在Linux中使用以下命令来清理它们。

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

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


理想情况下,我建议您修复导致信号量未关闭的错误,但为了回答这个问题,请问您能否在Mac OS X系统上提供“ipcs -s”的输出? - chkdsk
2个回答

1

我遇到了一个与我正在处理的一些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。

1
一些系统似乎在输出中在字段之间添加了额外的空格,因此您可能需要指定第三个字段。
ipcs -s | grep root |grep 666| cut -f3 -d' ' | xargs -I {} sudo ipcrm -s {}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接