Linux下ipcs指令的用法详解。ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。对于程序员可能更有用些,普通的系统管理员一般用不到此指令。
(1)显示消息队列信息,
修改消息队列大小:
root:用户:/etc/sysctl.conf
kernel.msgmnb=4203520
kernel.msgmnb =3520
kernel.msgmni = 2878
保存后需要执行 sysctl -p,然后重建所有消息队列
ipcs-q : 显示所有的消息队列
ipcs-qt : 显示消息队列的创建时间,发送和接收最后一条消息的时间
mas@[172.16.9.38:/mas]$ipcs -qt
------ MessageQueues Send/Recv/Change Times --------
msqid owner send recv change
65536 mas Notset Notset May 15 15:56:39
98305 mas May 1515:59:22 May 1515:59:22 May 15 15:56:39
ipcs-qp: 显示往消息队列中放消息和从消息队列中取消息的进程ID
mas@[172.16.9.38:/mas]$ipcs -qp
------ MessageQueues PIDs --------
msqid owner lspid lrpid
65536 mas 0 0
98305 mas 21941 21941
ipcs-q -i msgid: 显示该消息队列结构体中的消息信息:
mas@[172.16.9.38:/mas]$ipcs -q -i 98305
Message Queuemsqid=98305
uid=512 gid=500cuid=512 cgid=500 mode=0600
cbytes=0 qbytes=4203520 qnum=0 lspid=21941 lrpid=21941
send_time=Thu May 1516:00:19 2008
rcv_time=Thu May 1516:00:19 2008
change_time=Thu May15 15:56:39 2008
ipcs-ql : 显示消息队列的限制信息:
mas@[172.16.9.38:/mas]$ipcs -ql
------ Messages:Limits --------
maxqueues system wide =2878 //最大进程数
maxsize of message (bytes) = 8192 //队列中最大消息长度
default max size ofqueue (bytes) = 4203520
(2)ipcs指令的man手册中文翻译
ipcs 命令
用途
报告进程间通信设施状态。
语法
ipcs [ -m] [ -q] [-s] [ -S] [ -P] [ -l] [ -a | -b -c -o -p -t] [ -T] [ -C CoreFile] [ -N Kernel ]
描述
ipcs命令往标准输出写入一些关于活动进程间通信设施的信息。如果没有指定任何标志,ipcs命令用简短格式写入一些关于当前活动消息队列、共享内存段、信号量、远程队列和本地队列标题。
列标题和在 ipcs命令中的列的含义列在下面。圆括号内的字母表示导致对应的报头出现的标志。all设计符表示始终显示报头。这些标志仅仅确定提供给每个设备何种信息。但它们并不确定将列出哪些设备。
T(all)设施的类型。共有三种设施类型:
q
消息队列
m
共享内存段
s
信号量
ID (all)设施项的标识。
KEY (all)用作 msgget子例程、semget 子例程或者 shmget 子例程的参数的键构成了设施项。
注:当除去内存段时,共享内存段的密钥改变为 IPC_PRIVATE,直到所有附加在段上的进程和它拆离。
MODE(all)设施访问方式和标志。这种方式由 11 个字符组成,解释如下:
前两个字符如下所示:
R
如果进程在等待 msgrcv 系统调用。
S
如果进程在等待 msgsnd 系统调用。
D
如果有关的共享内存段被除去。当附加在段上的最后一个进程拆离后它就会消失。
C
当第一个附加进程运行时,如果有关的共享内存段被清空。
-
如果没有设置相应的特定标志。
接下来的九个字符作为每三个一组解释。第一组是指拥有者有许可权;第二组是指在设施项的用户组中其他用户的许可权;最后一组指所有的用户。在每组中,第一个字符表示允许读,第二个字符表示可以写或者修改设施项,最后一个字符当前没有用过。
权限如下所示:
r
如果授予了读许可权。
w
如果授予了写许可权。
a
如果授予了修改许可权。
-
如果没有授予指定的许可权。
OWNER(all)设施项所有者的登录名。
GROUP (all)拥有设施项的组名。
CREATOR(a、c)设施项创建者的登录名。
CGROUP(a、c)设施项创建者的组名。
注: 对于OWNER、GROUP、CREATOR 和 CGROUP,显示用户和组的标识而不显示登录名。
CBYTES(a、o)当前停留在相关消息队列中的消息的字节数。
QNUM(a、o)当前停留在相关消息队列中的消息的字节数。
QBYTES(a、b)停留在相关消息队列中消息允许的最大字节数。
LSPID(a、p)发送消息到相关队列的最后进程的标识。如果发送的最后一条消息是来自节点上的进程而不是保留该节点的队列,LSPID 是真正把消息放进队列的内核进程的PID,而不是发送进程的 PID。
LRPID(a、p)接收来自相关队列的消息的进程标识。如果接收的最后一条消息来自一个节点上的进程而不是保留该队列的节点,LRPID 是真正接收队列上消息的内核进程的PID ,而不是接收进程的 PID。
STIME(a、t)最后一条消息发送到相关队列的时间。对于远程队列,这是服务器时间。没有做任何措施来补偿本地时钟和服务器时钟之间的时区差异。
RTIME(a、t)接受最后一条来自相关队列的消息的时间。对于远程队列来说,这是服务器时间。没有做任何措施来补偿本地时钟和服务器始终之间的时区差异。
CTIME(a、t)创建和改变相关项的时间。对于远程队列,这是服务器时间。没有做任何措施来本地时钟和服务器时钟之间的任何时区差异。
NATTCH(a、o)连接在关联的共享内存段的进程数。
SEGSZ(a、b)关联的共享内存段的大小。
CPID(a、p)共享内存项的创建程序的进程标识。
LPID(a、p)连接或者拆离共享内存段的最后一个进程的标识。
ATIME(a、t)最后一次与关联的共享内存段完成连接的时间。
DTIME(a、t)最后一次与关联的共享内存段完成拆离的时间。
NSEMS(a、b)在与信号项相关联的信号集中的信号量数量。
OTIME(a、t)在关联的信号量中完成信号量操作的时间。
SID (S)共享内存段的标识。SID可以用作 svmon -S 命令的输入。
该命令支持多字节字符集。
标志
-a 使用 -b、-c、-o、-p 和-t 标志。
-b写入消息队列的队列上消息的最大字节数、共享内存段的大小、每个信号量集中信号量的数量。
-c写入构建该设施的用户的登录名和组名称。
-CCoreFile 用由CoreFile 参数指定的文件来代替 /dev/mem 文件。CoreFile 参数是由 Ctrl-(left)Alt-Pad1按键顺序创建的内存映象文件。
-l 当和 -S标志一起使用时,该标志写入未展开的 SID 列表。
-m 写入一些关于活动共享内存段的信息。
-NKernel 用指定的Kernel( /usr/lib/boot/unix 文件是缺省的)。
-o 写以下的使用信息:
队列上的消息数
消息队列上消息的总字节数
连接在共享内存段上的进程数
-p 写进程编号的信息:
最后接收消息队列上消息的进程号
最后在消息队列上发送消息的进程号
创建进程的进程号
最后一个连接或拆离共享内存段的进程编号
-P 写入与共享内存标识有关的SID(段标识)列表,以及保留在那个段中的字节数,和段是否已启用大页的标志符。如果段支持大页面,就显示一个 'Y',否则显示一个 '-'。
-q 写入一些关于活动消息队列的信息。
-s 写入一些关于活动信号量集的信息。
-S 写入连接在共享内存标识上的 SID列表。
-t 写入时间信息:
最后一次更改所有设备访问许可权的控制操作的时间。
消息队列上最后一次执行 msgsnd 和msgrcv 的时间。
共享内存上最后一次执行 shmat 和shmdt 的时间。
在信号量集上最后一次执行 semop的时间。
-T 写入带有日期的 -t 标记的输出。
注:
如果用户指定 -C 或者 -N标记,实型和有效的 UID/GID 设置为调用 ipcs 的用户的实型 UID/GID。
当运行 ipcs时可以更改值;仅当检索它时它给出的信息才保证是正确的。