Si tiene la suerte de utilizar HP-UX , el comando pipcs (PDF) (lo siento enlace roto, no hay archivo actual , vea esta página del manual en unix.com en su lugar) realiza el equivalente POSIX al SysV IPC ipcs dominio. Lamentablemente, nunca ha aparecido para otros sistemas operativos. El paquete util-linux actual (enero de 2021) que proporciona ipcs apenas menciona mqueues POSIX.
Si tienes mqueue montado en /dev/mqueue , qué es admitido es la lectura de metadatos para una cola existente como un archivo:
example@unixlinux.online $ sudo mount -t mqueue mqueue /dev/mqueue
example@unixlinux.online $ mq_create -c /myQ
example@unixlinux.online $ cat /dev/mqueue/myQ
QSIZE:0 NOTIFY:0 SIGNO:0 NOTIFY_PID:0
Los QSIZE lamentablemente es solo el tamaño en bytes, no en mensajes; en Linux no hay (hasta ahora, kernel 5.4) ningún campo de recuento de mensajes, a diferencia de FreeBSD que proporciona un CURMSG valor:
example@unixlinux.online $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
Así que la respuesta debería ser "montar mqueue FS y usar cat ", pero no lo es :(
(Montar mqueue FS no es un requisito previo para usar la API de MQ, solo le permite hacer algunas cosas de "todo es un archivo").
Hay una buena cobertura de las colas de mensajes en el libro La interfaz de programación de Linux , incluido el código fuente C para varias herramientas CLI para crear, inspeccionar y usar colas de mensajes. Afortunadamente, el capítulo 52 del libro que cubre este tema está actualmente disponible para descargar de forma gratuita. Ver pmsg_getattr.c .
El código de referencia canónico de Stephen's Programación de red Unix (Vol 2) 2nd Ed. (1999) está disponible aquí, proporciona, entre otras cosas, mqgetattr que también hará el trabajo (aunque es probable que necesite masajear un par de líneas en el nivel superior config.h , el #define para varios uint los tipos entran en conflicto con los encabezados del sistema Unix contemporáneo).
También hay módulos Ruby, Perl y TCL para esto, el de Ruby viene con un posix-mq-rb Herramienta CLI.
$ ipcs -q proporcionará estadísticas de la cola de mensajes desde la línea de comandos.
$ ipcs -m proporcionará estadísticas de memoria compartida desde la línea de comandos.
$ ipcs proporcionará todas las estadísticas del mecanismo ipc.
No conozco ningún comando, pero existe una llamada a la función libc que puede obtener las estadísticas:
hombre 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 */
};