linux命令检查POSIX消息队列

linux命令检查POSIX消息队列

我们可以通过命令查看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-rbCLI 工具。

答案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 */
       };

相关内容