在 Mac OS X 中清理信号量

问题描述 投票:0回答:3

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

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

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

linux macos command-line semaphore
3个回答
1
投票

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

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

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


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


0
投票

这在 MacOS Ventura 上对我有用:我必须使用大写字母

-S
作为密钥(表中的第三个条目)

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

和小写字母

-s
以及 id(表格中的第二个条目)

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

root
替换为其他用户名或任何其他过滤。

© www.soinside.com 2019 - 2024. All rights reserved.