我们可以通过命令查看System V消息队列的详细信息ipcs
。 Linux 中有查看 POSIX 消息队列的命令吗?
答案1
如果你有幸使用惠普-UX, 命令pipcs
(PDF)(抱歉,链接已损坏,没有当前存档, 看这unix.com 上的手册页)执行与 SysV IPC 命令等效的 POSIX ipcs
。遗憾的是,它从未出现在其他操作系统中。当前(2021 年 1 月)实用程序Linux提供的软件包ipcs
几乎没有提到 POSIX mqueues。
如果你已经mqueue
安装了/dev/mqueue
,什么是支持将现有队列的元数据读取为文件:
user@linux $ sudo mount -t mqueue mqueue /dev/mqueue
user@linux $ mq_create -c /myQ
user@linux $ cat /dev/mqueue/myQ
QSIZE:0 NOTIFY:0 SIGNO:0 NOTIFY_PID:0
遗憾的是,它只QSIZE
是以字节为单位的大小,而不是消息的大小;在 Linux 上(到目前为止,内核 5.4)没有消息计数字段 – 与自由BSD它提供了一个CURMSG
值:
user@freebsd $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
所以答案应该是“挂载 mqueue FS 并使用cat
”,但它不是:(
(安装 mqueue FS 并不是使用 MQ API 的先决条件,它只是让您做一些“一切都是文件”的事情。)
书中对消息队列有很好的介绍Linux 编程接口,包括用于创建、检查和使用消息队列的各种 CLI 工具的 C 源代码。令人高兴的是,涵盖该主题的本书的第 52 章目前可以免费下载。看pmsg_getattr.c
。
Stephen 的规范参考代码Unix 网络编程(第 2 卷)第 2 版。(1999) 可用这里,它还提供了其他mqgetattr
可以完成这项工作的东西(尽管您可能需要在顶层修改几行config.h
,#define
各种类型的 'suint
与当代 Unix 系统头冲突)。
还有红宝石,珀尔和TCL为此,Ruby 附带了一个模块posix-mq-rb
CLI 工具。
答案2
$ ipcs -q
将从命令行提供消息队列统计信息。
$ ipcs -m
将从命令行提供共享内存统计信息。
$ ipcs
将提供所有 ipc 机制统计数据。
答案3
我不知道任何命令,但存在一个可以获取统计信息的 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 */
};