Очистка семафоров в Mac OS X - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть программа, которая оставляет некоторые семафоры неочищенными, и, следовательно, если я запускаю ее пару раз, программа вызывает ошибку. Я использовал следующую команду в Linux для их очистки.

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

но это не работает на Mac. Какую команду я должен использовать, чтобы решить эту проблему в Mac OSX?

Ответы [ 2 ]

1 голос
/ 05 марта 2016

Я столкнулся с той же проблемой с некоторым 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 голос
/ 21 марта 2014

Некоторые системы добавляют дополнительные пробелы между полями в выходных данных, поэтому вам может потребоваться указать 3-е поле вместо:

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

Я бы посчитал это только кратковременным исправлением.

...