我有一个程序,它留下了一些未清理的信号量,因此如果我运行它几次,程序就会出错。我过去常常在linux中使用以下命令来清理它们。
ipcs -s | grep root |grep 666| cut -f2 -d' ' | xargs -I {} sudo ipcrm -s {}但这在mac上不起作用。在mac osx中,我应该使用什么命令来解决此问题?
发布于 2014-03-21 21:53:24
某些系统似乎会在输出中的字段之间添加额外的空格,因此您可能需要指定第三个字段:
ipcs -s | grep root |grep 666| cut -f3 -d' ' | xargs -I {} sudo ipcrm -s {}我会认为这只是一个短期的解决办法。
发布于 2016-03-05 16:04:41
我正在编写的一些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
https://stackoverflow.com/questions/8150562
复制相似问题