- ‘Ґ¬ д®ал
- ‚뤥«ҐЁҐ Ё ®бў®Ў®¦¤ҐЁҐ
- Ћ¦Ё¤ ЁҐ Ё ЇҐаҐ®б ®ЇҐа жЁЁ
- Ћв« ¤Є ᥬ д®а®ў
- 26.6.3. Контроль семафора
- Читайте также
- Дросселирование семафора для уменьшения состязательности между потоками
- Создание семафора
- Получение статуса семафора
- Использование семафора
- 3.2.3.5. Синтаксический контроль
- 3.2.3.6. Пунктуационный контроль
- 3.2.3.7. Семантический контроль
- Родительский контроль
- Инициализация значения семафора
- Контроль над Помощником
- Контроль доступа
- Родительский контроль
- 5.2.1. Выделение и освобождение семафоров
- Читайте также
- Использование семафоров
- Ограниченность семафоров
- Создание и инициализация семафоров
- Использование семафоров
- Освобождение параметров
- Освобождение мьютекса
- Освобождение блокировки
- 6.5.6 Освобождение области
- 12.3.1 Определение семафоров
- 12.3.2 Реализация семафоров
- 26.6.1. Создание множества семафоров
- 11.7. Ограничения семафоров System V
- 4.4.3. Взаимоблокировки исключающих семафоров
- 5.2.2. Инициализация семафоров
- 5.2.4. Отладка семафоров
‘Ґ¬ д®ал
‘Ґ¬ д®ал — бзҐвзЁЄЁ, Є®в®алҐ а §аҐи ов бЁеа®Ё§Ёа®ў вм ¬®¦ҐбвўҐлҐ Ї®в®ЄЁ. Linux ЇаҐ¤«®Ј Ґв «мвҐа вЁўго ॠ«Ё§ жЁо ᥬ д®а®ў, Є®в®алҐ ¬®Јгв ЁбЇ®«м§®ў вмбп ¤«п бЁеа®Ё§ жЁЁ Їа®жҐбб®ў (ᥬ д®ал Їа®жҐбб®ў Ё«Ё, Ё®Ј¤ , System V ᥬ д®ал). ‘Ґ¬ д®ал Їа®жҐбб®ў ўл¤Ґ«повбп, ЁбЇ®«м§говбп, Ё ®бў®Ў®¦¤ овбп Є Є Ё ᥣ¬Ґвл ®ЎйҐ© Ї ¬пвЁ. •®вп ®¤®Ј® ᥬ д®а ¤®бв в®з® ¤«п «оЎ®Ј® ЁбЇ®«м§®ў Ёп, ᥬ д®ал Їа®жҐбб®ў ўе®¤пв ў Ў®ал. Њл ЇаҐ¤бв ў«пҐ¬ бЁбвҐ¬лҐ ўл§®ўл ¤«п ᥬ д®а®ў Їа®жҐбб®ў, Ї®Є §лў п, Є Є Ё¬ЁвЁа®ў вм Їа®бв®© ¤ў®Ёзл© бҐ¬ д®а, ЁбЇ®«м§гп Ёе.
‚뤥«ҐЁҐ Ё ®бў®Ў®¦¤ҐЁҐ
‚맮ўл semget Ё semctl ўл¤Ґ«пов Ё ®бў®Ў®¦¤ ов ᥬ д®ал, «®ЈЁз® shmget Ё shmctl ¤«п ®ЎйҐ© Ї ¬пвЁ. ‚맮ўЁвҐ semget б Є«о箬, ®ЇаҐ¤Ґ«пойЁ¬ Ў®а ᥬ д®а , зЁб«® ᥬ д®а®ў ў Ў®аҐ, Ё д« ¦ЄЁ Їа ў ¤®бвгЇ , Є Є Ё ¤«п shmget ; ў®§ўа й Ґ¬®Ґ § 票Ґ — Ё¤ҐвЁдЁЄ в®а Ў®а ᥬ д®а . ‚л ¬®¦ҐвҐ Ї®«гзЁвм Ё¤ҐвЁдЁЄ в®а бгйҐбвўго饣® ᥬ д®а , § п § 票Ґ ҐЈ® Є«оз ; ў н⮬ б«гз Ґ, зЁб«® ᥬ д®а®ў ¬®¦Ґв Ўлвм г«Ґўл¬.
‘Ґ¬ д®ал Їа®¤®«¦ ов бгйҐбвў®ў вм ¤ ¦Ґ Ї®б«Ґ в®Ј®, Є Є ўбҐ Їа®жҐббл, ЁбЇ®«м§гойЁҐ Ёе § ўҐаиЁ«Ёбм. Џ®б«Ґ¤Ё© Їа®жҐбб, ЁбЇ®«м§гойЁ© Ў®а ᥬ д®а , ¤®«¦Ґ пў® г¤ «Ёвм ҐЈ®. —в®Ўл н⮠ᤥ« вм, ўл§®ўЁвҐ semctl б Ё¤ҐвЁдЁЄ в®а®¬ ᥬ д®а , зЁб«®¬ ᥬ д®а®ў ў Ў®аҐ, IPC_RMID Є Є ваҐвЁ© Ї а ¬Ґва, Ё «оЎ®Ґ § 票Ґ union semun Є Є зҐвўҐавл© Ї а ¬Ґва (Є®в®ал© ЁЈ®аЁагҐвбп). ќддҐЄвЁўл© Ї®«м§®ў ⥫мбЄЁ© Ё¤ҐвЁдЁЄ в®а ўл§лў о饣® Їа®жҐбб ¤®«¦Ґ ᮮ⢥вбвў®ў вм Ё¤ҐвЁдЁЄ в®аг Їа®Ја ¬¬л ўл¤Ґ«ҐўиҐ© ᥬ д®а (Ё«Ё ўл§лў ой п Їа®Ја ¬¬ ¤®«¦ Ўлвм § ЇгйҐ бгЇҐаЇ®«м§®ў ⥫Ґ¬). ‚ ®в«ЁзЁҐ ®в ᥣ¬Ґв®ў ®ЎйҐ© Ї ¬пвЁ, г¤ «ҐЁҐ ᥬ д®а § бв ў«пҐв Linux ®бў®Ў®¦¤ вм ҐЈ® Ґ¬Ґ¤«Ґ®.
‹ЁбвЁЈ 5.2 ¤Ґ¬®бваЁагҐв дгЄжЁЁ ўл¤Ґ«ҐЁп Ё ®бў®Ў®¤ҐЁп ¤ў®Ёз®Ј® ᥬ д®а .
‚뤥«ҐЁҐ Ё ®бў®Ў®¦¤ҐЁҐ ¤ў®Ёз®Ј® ᥬ д®а .(sem_al.c)
Ћ¦Ё¤ ЁҐ Ё ЇҐаҐ®б ®ЇҐа жЁЁ
Љ ¦¤л© ᥬ д®а Ё¬ҐҐв Ґ®ваЁж ⥫쮥 § 票Ґ Ё Ї®¤¤Ґа¦Ёў Ґв § ¤Ґа¦Єг Ё ЇҐаҐ®б ®ЇҐа жЁЁ. ‘ЁбвҐ¬л© ўл§®ў semop ®бгйҐбвў«пҐв ®ЎҐ ®ЇҐа жЁЁ. …Ј® ЇҐаўл© Ї а ¬Ґва ®ЇаҐ¤Ґ«пҐв Ё¤ҐвЁдЁЄ в®а Ў®а ᥬ д®а . …Ј® ўв®а®© Ї а ¬Ґва — ¬ ббЁў struct sembuf , ®ЇаҐ¤Ґ«пойЁҐ ®ЇҐа жЁЁ, Є®в®алҐ ўл е®вЁвҐ ўлЇ®«Ёвм. ’аҐвЁ© Ї а ¬Ґва — ¤«Ё нв®Ј® ¬ ббЁў .
- Џ®«п struct sembuf ЇҐаҐзЁб«Ґл §¤Ґбм:
- sem_num — ®¬Ґа ᥬ д®а ў Ў®аҐ ᥬ д®а®ў, Є®в®а®¬ ®ЇҐа жЁп ўлЇ®«Ґ .
- sem_op — 楫®Ґ зЁб«®, Є®в®а®Ґ ®ЇаҐ¤Ґ«пҐв ®ЇҐа жЁо ᥬ д®а . …б«Ё sem_op — Ї®«®¦ЁвҐ«м®Ґ зЁб«®, в® зЁб«® ¤®Ў ў«пҐвбп Є § 票о ᥬ д®а Ґ¬Ґ¤«Ґ®. …б«Ё sem_op — ®ваЁж ⥫쮥 зЁб«®, в® Ўб®«о⮥ § 票Ґ зЁб« ўлзҐв Ґвбп Ё§ § 票п ᥬ д®а . …б«Ё н⮠ᤥ« Ґв § ҐзҐЁҐ ᥬ д®а ®ваЁж ⥫мл¬, в® ўл§®ў Ў«®ЄЁагҐвбп, Ї®Є § 票Ґ ᥬ д®а Ґ бв Ґв в ЄЁ¬ ¦Ґ Ў®«миЁ¬, Є Є Ўб®«о⮥ § 票Ґ¬ sem_op (Ї®в®¬г зв® ¤агЈЁҐ Їа®жҐббл ¬®Јгв ҐЈ® 㢥«ЁзЁў вм). …б«Ё sem_op г«Ґў®Ґ, ®ЇҐа жЁп Ў«®ЄЁагҐвбп, Ї®Є § 票Ґ ᥬ д®а Ґ бв Ґв г«Ґўл¬.
- sem_flg — § 票Ґ д« ¦Є . ЋЇаҐ¤Ґ«ЁвҐ IPC_NOWAIT , зв®Ўл ЇаҐ¤®вўа вЁвм Ў«®ЄЁа®ўЄг ®ЇҐа жЁЁ; Ґб«Ё ®ЇҐа жЁп § Ў«®ЄЁа®ў , ўл§®ў semop ў¬Ґбв® нв®Ј® § ўҐаиЁвбп ®иЁЎЄ®©. …б«Ё ‚л ®ЇаҐ¤Ґ«ЁвҐ SEM_UNDO , Linux ўв®¬ вЁзҐбЄЁ ®в¬ҐЁв ®ЇҐа жЁо б ᥬ д®а®¬, Є®Ј¤ Їа®жҐбб ЇаҐЄа вЁвбп.
‹ЁбвЁЈ 5.4 ¤Ґ¬®бваЁагҐв ®¦Ё¤ ЁҐ Ё ЇҐаҐ®б ®ЇҐа жЁЁ ¤«п ¤ў®Ёз®Ј® ᥬ д®а . (sem_w.c)
ЋЇаҐ¤Ґ«ҐЁҐ д« ¦Є SEM_UNDO а §аҐи Ґв а Ў®в вм б Їа®Ў«Ґ¬®© § ўҐаиҐЁп Їа®жҐбб ЇаЁ ўл¤Ґ«ҐЁЁ Ґ¬г аҐбгаб®ў зҐаҐ§ ᥬ д®а. Љ®Ј¤ Їа®жҐбб § ўҐаи Ґвбп, ¤®Ўа®ў®«м® Ё«Ё ҐЇаҐ¤ ¬ҐаҐ®, § 票п ᥬ д®а ўв®¬ вЁзҐбЄЁ Є®а४вЁаговбп, зв®Ўл «®в¬ҐЁвм» нд䥪вл Їа®жҐбб ᥬ д®а. Ќ ЇаЁ¬Ґа, Ґб«Ё Їа®жҐбб, Є®в®ал© г¬ҐмиЁ« ᥬ д®а, гЁз⮦Ґ, § 票Ґ ᥬ д®а 㢥«ЁзҐў Ґвбп.
Ћв« ¤Є ᥬ д®а®ў
€бЇ®«м§г©вҐ Є®¬ ¤г ipcs -s , зв®Ўл ®в®Ўа §Ёвм Ёд®а¬ жЁо ® бгйҐбвўгойЁе Ў®а е ᥬ д®а®ў.
€бЇ®«м§г©вҐ Є®¬ ¤г ipcrm sem , зв®Ўл г¤ «Ёвм Ў®а ᥬ д®а®ў Ё§ Є®¬ ¤®© бва®ЄЁ. Ќ ЇаЁ¬Ґа, зв®Ўл г¤ «Ёвм Ў®а ᥬ д®а б Ё¤ҐвЁдЁЄ в®а®¬ 5790517, ЁбЇ®«м§г©вҐ б«Ґ¤гойго Є®¬ ¤г:
Источник
26.6.3. Контроль семафора
26.6.3. Контроль семафора
Для контроля семафора используется системный вызов semctl():
int semctl(int semid, int semnum, int cmd, union semun arg);
Первый аргумент — это идентификатор семафора, второй — номер семафора во множестве семафоров (нумерация начиняется с 0). В отличие от очереди сообщений, где достаточно было указать только идентификатор очереди, при работе с семафорами нужно обязательно указывать номер конкретного семафора, над которым вы хотите выполнить операцию. Третий аргумент — это команда, которую нужно выполнить над семафором. Возможные команды представлены в таблице 26.1.
Команды управления семафорами Таблица 26.1
Команда Назначение IPC_STAT Запоминает структуру semid_ds для множества по адресу buf объединения semun (чуть позже мы подробно рассмотрим эту структуру и объединение semun) IPC_SET Устанавливает значение члена ipc_perm структуры semid_ds IPC_RMID Удаляет множество GETALL Позволяет получить значения всех семафоров. Значения возвращаются в виде массива unsigned short, на который указывает член объединения array GETNCNT Возвращает число процессов, которые ожидают ресурсы в данный момент GETPID Возвращает PID процесса, выполнившего последний вызов semop() GETVAL Возвращает значение одного семафора GETZCNT Возвращает число процессов, которые ожидают полного освобождения ресурса SETALL Устанавливает значение семафоров. Значения берутся из члена array объединения semun SETVAL Устанавливает значение конкретного семафора. Значение берется из элемента val объединения semun
Последний аргумент — это объединение (union) аргументов, которые можно использовать для управления семафором. Рассмотрим подробнее это объединение, объявленное в файле /usr/src/linux/include/linux/sem.h:
int val; /* значение для SETVAL */
struct semid_ds *buf; /* буфер для IPC_STAT и IPC_SET */
ushort *array; /* массив для GETALL и SETALL */
struct seminfo *__buf; /* буфер для IPC_INFO */
Первый член этого объединения val используется для установки значения одного семафора при использовании команды SETVAL.
Член buf используется командами IPC_STAT и IPC_SET. Это копия внутренней структуры данных семафора.
Указатель на массив array используется командами GETALL и SETALL для получения или установки значений всех семафоров во множестве.
Последние два члена объединения специфичны только для Linux — в других UNIX-системах вы их не найдете. Эти элементы использует ядро.
В случае успеха системный вызов semctl() возвращает натуральное число, а в случае ошибки -1. Переменная errno равна:
? EACCESS — не хватает полномочий;
? EFAULT — адрес arg ошибочен;
? EIDRM — множество помечено для удаления:
? EINVAL — неправильный аргумент semid;
? EPERM — у вас нет прав для выполнения команды cmd;
? ERANGE — значение семафора вышло за пределы допустимых значений.
Пример получения значения семафора с номером N из множества sid:
val=semctl(sid, N, GETVAL, 0);
Предположим, что нам нужно вывести состояние всех трех имеющихся принтеров:
for (c=0; x sem_perm.mode);
/* Изменяем права доступа */
/* Обновляем внутреннюю структуру */
semctl(sid, 0, IPC_SET, opts);
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРес
Читайте также
Дросселирование семафора для уменьшения состязательности между потоками
Дросселирование семафора для уменьшения состязательности между потоками Слишком большое количество потоков, соревнующихся между собой за право владения единственным ресурсом, например, мьютексом или объектом CS, могут стать причиной снижения производительности как в
Создание семафора
Создание семафора QNX поддерживает два типа семафоров — неименованные и именованные. Разница между ними заключается в том, что к именованному семафору можно обратиться из любого процесса в системе (или даже по сети QNET с другого сетевого хоста), поскольку такой семафор
Получение статуса семафора
Получение статуса семафора int sem_getvalue(sem_t* sem, int* value);Эта функция используется преимущественно для отладки операций над семафорами. По адресу, указанному в value, устанавливается текущее значение счетчика семафора. Поскольку значение счетчика семафора может измениться в
Использование семафора
Использование семафора Как уже говорилось выше, семафор является крайне гибким и эффективным средством синхронизации, особенно удобным для построения собственных средств планирования выполнения потоков. В этом смысле семафор представляет ценность не только как
3.2.3.5. Синтаксический контроль
3.2.3.5. Синтаксический контроль Программа СИНТ1Программа СИНТ1 находит в указанной области именные словосочетания вида ‹прилагательное› + ‹существительное› и ‹существительное› + ‹существительное в форме родит. падежа› и др. Программа может оказаться
3.2.3.6. Пунктуационный контроль
3.2.3.6. Пунктуационный контроль Пунктуационные ошибки в реальных предложениях русского языка встречаются довольно часто. Разделим их условно на две группы. Ошибки одной группы связаны с уровнем пунктуационной грамотности и появляются в основном в тех типах текстов
3.2.3.7. Семантический контроль
3.2.3.7. Семантический контроль Программа СЕМ1Программа обнаруживает несовпадение ожидаемых семантических признаков актантов (подлежащее, дополнения) глагола и признаков слов (групп слов), реально занимающих соответствующие позиции. Такое несовпадение мешает завершить
Родительский контроль
Родительский контроль Дети очень быстро учатся пользоваться компьютером. Безо всяких книг, систем помощи или компьютерных курсов.Правда, пользуются дети компьютером только для игр (где они этого насмотрелись?!). Ну, еще для путешествий по Интернету, где они только болтают
Инициализация значения семафора
Инициализация значения семафора В комментариях к исходному коду в издании этой книги 1990 года неправильно утверждалось, что значения семафоров набора инициализируются нулем при вызове semget с созданием нового семафора. Хотя в некоторых системах это действительно
Контроль над Помощником
Контроль над Помощником Используйте свойства объекта Assistant (табл. 14.1) для контроля за тем, как и когдаПомощник по Office будет появляться на экране. Пока вы не уверены в том. что Помощник уже включен, убедитесь в том, что его свойство On имеет значение True, прежде чем пытаться
Контроль доступа
Контроль доступа Ограничивать доступ к компьютеру можно и нужно. Как это сделать и какую программу выбрать — зависит только от вас. ведь каждый случай уникален. В большинстве случаев утилиты для контроля доступа к ресурсам компьютера предназначены для авторизации
Родительский контроль
Родительский контроль Существует способ ограничить доступ детей к определенным сайтам, играм, да и, вообще, к самому компьютеру. Скажем, после 21 часа работа на компьютере запрещена.Для этого в панели управления создается для ребенка учетная запись с ограниченными
Источник
5.2.1. Выделение и освобождение семафоров
5.2.1. Выделение и освобождение семафоров
Функции semget() и semctl() выделяют и освобождают семафоры, функционируя подобно функциям shmget() и shmctl(). Первым аргументом функции semget() является ключ, идентифицирующий группу семафоров; второй аргумент — это число семафоров в группе; третий аргумент — флаги прав доступа, как в функции shmget(). Функция semget() возвращает идентификатор группы семафоров. Если задан ключ, принадлежащий существующей группе, будет возвращен ее идентификатор. В этом случае второй аргумент (число семафоров) может равняться нулю.
Семафоры продолжают существовать даже после того, как все работавшие с ними процессы завершились. Чтобы система не исчерпала лимит семафоров, последний процесс должен явно удалить группу семафоров. Для этого нужно вызвать функцию semctl(), передав ей идентификатор группы, число семафоров в группе, флаг IPC_RMID и произвольное значение типа union semun (оно игнорируется). Значение EUID (эффективный идентификатор пользователя) процесса, вызвавшего функцию, должно совпадать с аналогичным значением процесса, создавшего группу семафоров (либо вызывающий процесс должен быть запущен пользователем root). В отличие от совместно используемых сегментов памяти, удаляемая группа семафоров немедленно освобождается.
В листинге 5.2 представлены функции, выделяющие и освобождающие двоичный семафор.
Листинг 5.2. (sem_all_deall.c) Выделение и освобождение двоичного семафора
/* Тип union semun необходимо определить самостоятельно. */
struct semid_ds *buf;
unsigned short int* array;
struct seminfo *__buf;
/* Получаем идентификатор семафора и создаем семафор,
если идентификатор оказывается уникальным. */
int binary_semaphore_allocation(key_t key, int sem_flags) <
return semget(key, 1, sem_flags);
/* Освобождаем семафор, подразумевая, что пользователи
больше не работают с ним. В случае ошибки
int binary_semaphore_deallocate(int semid) <
union semun ignored_argument;
return semctl(semid, 1, IPC_RMID, ignored_argument>
Читайте также
Использование семафоров
Использование семафоров Классической областью применения семафоров является управление распределением конечных ресурсов, когда значение счетчика семафора ассоциируется с определенным количеством доступных ресурсов, например, количеством сообщений, находящихся в
Ограниченность семафоров
Ограниченность семафоров В Windows существуют важные ограничения, касающиеся реализации семафоров. Например, каким образом поток может потребовать, чтобы счетчик семафора уменьшился на 2? Для этого поток мог бы организовать ожидание два раза подряд, как показано ниже, но
Создание и инициализация семафоров
Использование семафоров
Использование семафоров Функция down_interruptible() выполняет попытку захватить данный семафор. Если эта попытка неудачна, то задание переводится в состояние ожидания с флагом TASK_INTERRUPTIBLE. Из материала главы 3 следует вспомнить, что такое состояние процесса означает, что задание
Освобождение параметров
Освобождение параметров int pthread_mutexattr_destroy(pthread_mutexattr_t* attr);Вызов разрушает ранее применявшийся объект — атрибутную запись мьютекса, после чего она уже не может более использоваться для инициализации мьютекса без предварительного выполнения вызова pthread_mutexattr_init().На этом
Освобождение мьютекса
Освобождение мьютекса int pthread_mutex_unlock(pthread_mutex_t* mutex);Функция pthread_mutex_unlock() освобождает мьютекс, на который ссылается переменная mutex. Вызвавший поток должен быть владельцем мьютекса. Если есть потоки, блокированные в ожидании освобождения мьютекса, то поток с наивысшим
Освобождение блокировки
Освобождение блокировки int pthread_rwlock_unlock(pthread_rwlock_t* rwl);Функция освобождает захваченный любым образом объект блокировки чтения/записи. Если объект был захвачен в режиме множественного использования (блокировки по чтению), то количество его освобождений должно равняться
6.5.6 Освобождение области
6.5.6 Освобождение области Если область не присоединена уже ни к какому процессу, она может быть освобождена ядром и возвращена в список свободных областей (Рисунок 6.25). Если область связана с индексом, ядро освобождает и индекс с помощью алгоритма iput, учитывая значение
12.3.1 Определение семафоров
12.3.1 Определение семафоров Семафор представляет собой обрабатываемый ядром целочисленный объект, для которого определены следующие элементарные (неделимые) операции:• Инициализация семафора, в результате которой семафору присваивается неотрицательное значение;•
12.3.2 Реализация семафоров
12.3.2 Реализация семафоров Дийкстра [Dijkstra 65] показал, что семафоры можно реализовать без использования специальных машинных инструкций. На Рисунке 12.6 представлены реализующие семафоры функции, написанные на языке Си. Функция Pprim блокирует семафор по результатам проверки
26.6.1. Создание множества семафоров
26.6.1. Создание множества семафоров Для создания множества семафоров или подключения к уже существующему множеству используется системный вызов semget():int semget(key_t key, int nsems, int semflg);Первый аргумент — это ключ IPC, который, как обычно, создается системным вызовом ftok(). Он
11.7. Ограничения семафоров System V
11.7. Ограничения семафоров System V На семафоры System V накладываются определенные системные ограничения, так же, как и на очереди сообщений. Большинство этих ограничений были связаны с особенностями реализации System V (раздел 3.8). Они показаны в табл. 11.1. Первая колонка содержит
4.4.3. Взаимоблокировки исключающих семафоров
4.4.3. Взаимоблокировки исключающих семафоров Исключающие семафоры являются механизмом, позволяющим одному потоку блокировать выполнение другого потока. Это приводит к возникновению нового класса ошибок. называемых взаимоблокировками или тупиковыми ситуациями. Смысл
5.2.2. Инициализация семафоров
5.2.2. Инициализация семафоров Выделение и инициализация семафора — две разные операции. Чтобы проинициализировать семафор, вызовите функцию semctl(), задав второй аргумент равным нулю, а третий аргумент — равным константе SETALL. Четвертый аргумент должен иметь тип union semun, поле
5.2.4. Отладка семафоров
5.2.4. Отладка семафоров С помощью команды ipcs -s можно получить информацию о существующих группах семафоров. Команда ipcrm sem позволяет удалить заданную группу, например:% ipcrm sem
Источник