Мы можем проверить детали очереди сообщений системы V с помощью ipcs
команды. Есть ли какая-нибудь команда для проверки очереди сообщений POSIX в Linux?
Я не знаю ни одной команды, но существует вызов функции libc, который может получить статистику:
человек 3 mq_getattr
mq_getattr() returns an mq_attr structure in the buffer pointed by
attr. This structure is defined as:
struct mq_attr {
long mq_flags; /* Flags: 0 or O_NONBLOCK */
long mq_maxmsg; /* Max. # of messages on queue */
long mq_msgsize; /* Max. message size (bytes) */
long mq_curmsgs; /* # of messages currently in queue */
};
Если вам повезло использовать HP-UX , команда pipcs
(PDF) выполняет POSIX, эквивалентный команде SysV IPC ipcs
. К сожалению, он никогда не появлялся для других ОС. Текущий (март 2013 г.) пакет util-linux , в котором ipcs
почти не упоминаются пометки POSIX.
Если вы mqueue
подключены /dev/mqueue
, то поддерживается только чтение очереди в виде файла:
user@linux $ cat /dev/mqueue/myQ
QSIZE:0 NOTIFY:0 SIGNO:0 NOTIFY_PID:0
К QSIZE
сожалению, это размер в байтах, а не в сообщениях; в Linux (пока) нет поля подсчета сообщений - в отличие от FreeBSD, которое предоставляет CURMSG
значение:
user@freebsd $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
Так что ответом должно быть «смонтировать mqueue FS и использовать cat
», но это не так :(
(Монтирование mqueue FS не является обязательным условием для использования MQ API, оно просто позволяет вам делать некоторые вещи «все в файле».)
Если вам действительно нужно отслеживать очереди, книга «Интерфейс программирования Linux» содержит исходный код C для различных инструментов CLI для создания, проверки и использования очередей сообщений. К счастью, глава 52 книги, которая охватывает эту тему, в настоящее время доступна для бесплатной загрузки. См pmsg_getattr.c
.
Канонический код ссылки из сетевого программирования Стивена Unix (Том 2) 2-е изд. (1999) доступен здесь , он предоставляет, помимо прочего, mqgetattr
что тоже сделает эту работу (хотя вам, скорее всего, придется помассировать пару строк на верхнем уровне config.h
, они #define
для различных uint
типов конфликтуют с современными заголовками системы Unix).
Для этого есть также модули Ruby , Perl и TCL , в состав Ruby входит posix-mq-rb
инструмент CLI.
$ ipcs -q
предоставит статистику очереди сообщений из командной строки.$ ipcs -m
предоставит статистику общей памяти из командной строки.$ ipcs
предоставит всю статистику механизма ipc.источник
ipcs
не для очередей сообщений POSIX1ipcs
используется для очередей сообщений System V, а не для очередей сообщений POSIX