Можно ли перечислить открытые очереди SysV для определенных файлов?

У меня есть набор приложений, которые общаются друг с другом с помощью очередей SysV. Однако, когда я останавливаю приложение, иногда очереди остаются открытыми, что в свою очередь вызывает проблемы в следующий раз, когда я запускаю приложение.

Чтобы решить эту проблему, я хочу удалить оставшиеся очереди, но чтобы знать, какие очереди для удаления, я хотел бы указать, какие очереди связаны с определенным файлом. Возможно ли это сделать?

Очередь создается с использованием следующего (упрощенного) кода:

key_t key; int q_id; key = ftok("/some/file/name", 42); q_id = msgget(key, 0666 | IPC_CREAT); 

Поэтому, связанный с файлом, означает путь, используемый в вызове ftok .

One Solution collect form web for “Можно ли перечислить открытые очереди SysV для определенных файлов?”

Я думаю, что ваш лучший выбор – написать программу, которая вызывает ftok, чтобы получить ключ, что-то вроде:

 #include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> int main(int argc, char **argv) { unsigned long long key; if (argc != 3) { printf("Usage %s: [path] [id]\n" ,argv[0]); return 1; } key = ftok(argv[1], atoi(argv[2])); printf("%llx\n", key); return 0; } 

После этого вы можете использовать его для удаления очереди сообщений: ipcrm -Q <key> . Кроме того, вы можете изменить программу выше, чтобы вызвать msgctl(3) чтобы удалить очередь сообщений.

Interesting Posts

grep инвертированное соответствие по строке, удовлетворяющей шаблону

Масштабировать частоту процессора в CLI?

Безопасность зашифрованного (dm-crypt & LUKS) Ubuntu 12.04, установленного кем-то другим?

Резервное копирование и восстановление только некоторых разделов

su vs sudo -s vs sudo -i vs sudo bash

Перенаправление вывода в оболочку, разрешения

раскол столбца после n-го символа

Как запустить демон talkd?

Почему Лапис не работает?

Звуковой проигрыватель Deadbeef не извлекает информацию в Интернете (freedb, CDDB) о дорожках CD

Fedora 24: acpi = off -> Невозможно использовать графическую карту nvidia

Использование фиксированных строк в регулярных выражениях?

Как я могу вернуть конкретный код ошибки в этот момент в моем TCL-скрипте?

Как передать переменные среды в новый сеанс входа в ssh?

Как настроить сценарии загрузки для сохранения inphin inodes после неправильного завершения работы?

Linux и Unix - лучшая ОС в мире.