web-dev-qa-db-ja.com

POSIXメッセージキューをチェックするlinuxコマンド

ipcscommandを使用して、システムVメッセージキューの詳細を確認できます。 LinuxでPOSIXメッセージキューを確認するコマンドはありますか?

13
sujin

私が知っているコマンドはありませんが、統計を取得できるlibc関数呼び出しが存在します。

man 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 */
       };
2
Matthew Ife

$ ipcs -qは、コマンドラインからメッセージキューの統計情報を提供します。

$ ipcs -mは、コマンドラインから共有メモリの統計を提供します。

$ ipcsはすべてのIPCメカニズムの統計を提供します。

9
joe

HP-UXを使用できる運が良ければ、コマンド pipcs(PDF) はSysVと同等のPOSIX IPC ipcsコマンド。残念ながら、他のOSでは表示されていません。現在(2013年3月) til-linux パッケージipcsを提供するものは、POSIX mqueueについてほとんど言及していません。

mqueue/dev/mqueueにマウントされている場合、サポートされているのは、キューをファイルとして読み取るだけです。

user@linux $ cat /dev/mqueue/myQ
QSIZE:0          NOTIFY:0     SIGNO:0     NOTIFY_PID:0 

QSIZEは、残念ながらメッセージではなくバイト単位のサイズです。 Linuxでは(まだ)メッセージ数フィールドはありません-CURMSG値を提供するFreeBSDとは異なります:

user@freebsd $ cat /mnt/mqueue/myQ
QSIZE:0          MAXMSG:32         CURMSG:0          MSGSIZE:1024   

したがって、答えはである必要があります "mount the mqueue FS and use cat"ですが、そうではありません:(

(mqueueのマウントFSは、MQ APIを使用するための前提条件ではなく、「すべてがファイルである」ことを可能にするだけです。)

本当にキューを監視する必要がある場合、本 The Linux Programming Interface には、作成するさまざまなCLIツールのCソースコードが含まれています、メッセージキューを検査して使用します。幸いにも、このトピックをカバーする本の第52章は、現在無料でダウンロードできます。 pmsg_getattr.cを参照してください。

スティーブンのUnix Network Programming(Vol 2)2nd Ed。(1999)からの標準的な参照コードが利用可能です here 、それは提供しますとりわけmqgetattrもこの機能を果たします(ただし、トップレベルconfig.hの数行をマッサージする必要がありますが、#defineはさまざまなuintタイプは、現在のUnixシステムヘッダーと競合します)。

RubyPerl および [〜#〜] tcl [〜#〜] モジュールもあります。Ruby 1つは posix-mq-rb CLIツールが付属しています。

9
mr.spuratic