linux命令检查POSIX消息队列

suj*_*jin 16 linux ipc posix

我们可以在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 系统头文件发生冲突)。

也有RubyPerlTCL模块,Ruby 模块带有posix-mq-rbCLI 工具。


小智 9

$ ipcs -q 将从命令行提供消息队列统计信息。

$ ipcs -m 将从命令行提供共享内存统计信息。

$ ipcs 将提供所有 IPC 机制统计信息。

  • `ipcs` 不适用于 POSIX1 消息队列 (11认同)
  • `ipcs` 用于 System V 消息队列而不是 POSIX 消息队列 (4认同)

Mat*_*Ife 2

我不知道任何命令,但存在一个可以获取统计信息的 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)