当前位置: 首页 > 工具软件 > ipcs > 使用案例 >

在Linux中ipcs命令,Linux下ipcs指令的用法详解。

司空炯
2023-12-01

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

------ Message Queues Send/Recv/Change Times --------

msqid owner send recv change

65536 mas Not set Not set May 15 15:56:39

98305 mas May 15 15:59:22 May 15 15:59:22 May 15 15:56:39

ipcs -qp:显示往消息队列中放消息和从消息队列中取消息的进程ID

mas@[172.16.9.38:/mas]$ ipcs -qp

------ Message Queues 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 Queue msqid=98305

uid=512 gid=500 cuid=512 cgid=500 mode=0600

cbytes=0 qbytes=4203520 qnum=0 lspid=21941 lrpid=21941

send_time=Thu May 15 16:00:19 2008

rcv_time=Thu May 15 16:00:19 2008

change_time=Thu May 15 15:56:39 2008

ipcs -ql :显示消息队列的限制信息:

mas@[172.16.9.38:/mas]$ ipcs -ql

------ Messages: Limits --------

max queues system wide = 2878 //最大进程数

max size of message (bytes) = 8192 //队列中最大消息长度

default max size of queue (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时可以更改值;仅当检索它时它给出的信息才保证是正确的。

 类似资料: