我们可以在ipcs
命令的帮助下查看system V消息队列的详细信息。是否有任何命令可以在 Linux 中检查 POSIX 消息队列?
mr.*_*tic 13
如果您有幸使用HP-UX,则命令pipcs
(PDF)(抱歉链接断开,没有当前存档,请参阅unix.com 上的此手册页)执行与 SysV IPCipcs
命令等效的 POSIX 。遗憾的是,它从未出现在其他操作系统上。当前(2021 年 1 月)util-linux软件包ipcs
几乎没有提到 POSIX mqueue。
如果您已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
Run Code Online (Sandbox Code Playgroud)
QSIZE
遗憾的是,这只是以字节为单位的大小,而不是消息;在 Linux 上(到目前为止,内核 5.4)没有消息计数字段——不像FreeBSD提供一个CURMSG
值:
user@freebsd $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
Run Code Online (Sandbox Code Playgroud)
所以答案应该是“挂载 mqueue FS 并使用cat
”,但它不是 :(
(挂载 mqueue FS 不是使用 MQ API 的先决条件,它只是让您做一些“一切都是文件”的事情。)
The Linux Programming Interface一书中对消息队列有很好的介绍,包括用于创建、检查和使用消息队列的各种 CLI 工具的 C 源代码。令人高兴的是,本书的第 52 章涵盖了这个主题,目前可以免费下载。见pmsg_getattr.c
。
来自 Stephen 的Unix Network Programming (Vol 2) 2nd Ed的规范参考代码。(1999) 可在此处获得,它提供了mqgetattr
也可以完成这项工作的其他内容(尽管您可能需要在顶层修改几行,各种类型config.h
的#define
'suint
与当代 Unix 系统头文件发生冲突)。
也有Ruby、Perl和TCL模块,Ruby 模块带有posix-mq-rb
CLI 工具。
小智 9
$ ipcs -q
将从命令行提供消息队列统计信息。
$ ipcs -m
将从命令行提供共享内存统计信息。
$ ipcs
将提供所有 IPC 机制统计信息。
我不知道任何命令,但存在一个可以获取统计信息的 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 */
};
Run Code Online (Sandbox Code Playgroud)