Możemy sprawdzić szczegóły kolejki komunikatów systemu V za pomocą ipcs
polecenia. Czy jest jakieś polecenie sprawdzające kolejkę komunikatów POSIX w systemie Linux?
Nie znam żadnego polecenia, ale istnieje wywołanie funkcji libc, które może uzyskać statystyki:
człowiek 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 */
};
Jeśli masz szczęście korzystać z HP-UX , polecenie pipcs
(PDF) wykonuje POSIX równoważne poleceniu SysV IPC ipcs
. Niestety, nigdy nie pojawił się w innych systemach operacyjnych. Obecny (marzec 2013) pakiet util-linux , który ipcs
ledwo wspomina mqueue POSIX.
Jeśli masz mqueue
zamontowane /dev/mqueue
, obsługiwane jest po prostu odczytanie kolejki jako pliku:
user@linux $ cat /dev/mqueue/myQ
QSIZE:0 NOTIFY:0 SIGNO:0 NOTIFY_PID:0
Jest QSIZE
to niestety rozmiar w bajtach, a nie wiadomości; w Linuksie (jak dotąd) nie ma pola zliczania komunikatów - w przeciwieństwie do FreeBSD, który zapewnia CURMSG
wartość:
user@freebsd $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
Zatem odpowiedź powinna brzmieć „zamontuj mqueue FS i użyj cat
”, ale nie jest to :(
(Montowanie mqueue FS nie jest warunkiem wstępnym korzystania z MQ API, pozwala jedynie na wykonanie pewnych czynności typu „wszystko jest plikiem”).
Jeśli naprawdę potrzebujesz monitorować kolejki, książka Linux Programming Interface ma kod źródłowy C dla różnych narzędzi CLI do tworzenia, sprawdzania i używania kolejek komunikatów. Na szczęście rozdział 52 książki na ten temat jest obecnie dostępny do pobrania za darmo. Zobaczyć pmsg_getattr.c
.
Kanoniczny kod odniesienia z Stephen's Unix Network Programming (Vol 2) 2nd Ed. (1999) jest dostępny tutaj , zawiera między innymi to, mqgetattr
co również spełni swoje zadanie (chociaż prawdopodobnie będziesz musiał masować kilka linii na najwyższym poziomie config.h
, #define
różne uint
typy konfliktów ze współczesnymi nagłówkami systemu Unix).
Istnieją również moduły Ruby , Perl i TCL , Ruby jest wyposażony w posix-mq-rb
narzędzie CLI.
$ ipcs -q
dostarczy statystyki kolejki komunikatów z wiersza poleceń.$ ipcs -m
zapewni statystyki pamięci współdzielonej z wiersza poleceń.$ ipcs
dostarczy wszystkie statystyki mechanizmu ipc.źródło
ipcs
nie jest przeznaczony dla kolejek komunikatówipcs
jest używany w kolejkach komunikatów Systemu V, a nie w kolejkach komunikatów POSIX