2011-11-16 49 views
3

我有一個程序會留下一些信號量不清,因此如果我運行它幾次,程序將會出現故障。我曾經在linux中使用以下命令來清理它們。在Mac OS X中清理信號量

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

但這不適用於Mac。我應該使用什麼命令在mac osx中解決此問題?

+0

理想情況下,我會建議您修復導致信號量未被打開的錯誤,但爲了回答這個問題,能否請您在mac os上爲'ipcs -s'提供輸出x系統? – chkdsk

回答

1

一些系統出現在輸出字段之間添加額外的空間,所以你可能需要指定第三場代替:

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

我會認爲這只是一個短期的修復。

0

我遇到了一些與我工作的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