ipcs 命令
用途 :
linux/uinx上提供关于一些进程间通信方式的信息,包括共享内存,消息队列,信号,
报告进程间通信设施状态。
语法
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 时可以更改值;仅当检索它时它给出的信息才保证是正确的。
ipcs用法
ipcs -a 是默认的输出信息 打印出当前系统中所有的进程间通信方式的信息
ipcs -m 打印出使用共享内存进行进程间通信的信息
ipcs -q 打印出使用消息队列进行进程间通信的信息
ipcs -s 打印出使用信号进行进程间通信的信息
输出格式的控制
ipcs -t 输出信息的详细变化时间
ipcs -p 输出ipc方式的进程ID
ipcs -c 输出ipc方式的创建者/拥有者
ipcs -c 输出ipc各种方式的在该系统下的限制条件信息
ipcs -u 输出当前系统下ipc各种方式的状态信息(共享内存,消息队列,信号)
ipcrm 命令
移除一个消息对象。或者共享内存段,或者一个信号集,同时会将与ipc对象相关链的数据也一起移除。当然,只有超级管理员,或者ipc对象的创建者才有这项权利啦
ipcrm用法
ipcrm -M shmkey 移除用shmkey创建的共享内存段
ipcrm -m shmid 移除用shmid标识的共享内存段
ipcrm -Q msgkey 移除用msqkey创建的消息队列
ipcrm -q msqid 移除用msqid标识的消息队列
ipcrm -S semkey 移除用semkey创建的信号
ipcrm -s semid 移除用semid标识的信号
下面是一个操作示例:
view plaincopy to clipboardprint?
[ora@localhost ora]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x0399ef4c 262145 ora 660 255852544 55
------ Semaphore Arrays --------
key semid owner perms nsems
0x965bd64c 884736 ora 660 154
------ Message Queues --------
key msqid owner perms used-bytes messages
[ora@localhost ora]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x0399ef4c 262145 ora 660 255852544 50
------ Semaphore Arrays --------
key semid owner perms nsems
0x965bd64c 884736 ora 660 154
------ Message Queues --------
key msqid owner perms used-bytes messages
[ora@localhost ora]$ ipcrm -m 262145
[ora@localhost ora]$ ipcrm -s 884736
[ora@localhost ora]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
[ora@localhost ora]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
[ora@localhost ora]$ ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
[ora@localhost ora]$ ipcs -q
------ Message Queues --------
key msqid owner perms used-bytes messages
[ora@localhost ora]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x0399ef4c 262145 ora 660 255852544 55
------ Semaphore Arrays --------
key semid owner perms nsems
0x965bd64c 884736 ora 660 154
------ Message Queues --------
key msqid owner perms used-bytes messages
[ora@localhost ora]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x0399ef4c 262145 ora 660 255852544 50
------ Semaphore Arrays --------
key semid owner perms nsems
0x965bd64c 884736 ora 660 154
------ Message Queues --------
key msqid owner perms used-bytes messages
[ora@localhost ora]$ ipcrm -m 262145
[ora@localhost ora]$ ipcrm -s 884736
[ora@localhost ora]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
[ora@localhost ora]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
[ora@localhost ora]$ ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
[ora@localhost ora]$ ipcs -q
------ Message Queues --------
key msqid owner perms used-bytes messages
在上面示例示例中:
首先用ipcs命令列出了共享内存、共享队列,共享信号量。
显示出当前系统中有共享内存,共享信号量,没有共享队列。
然后执行ipcrm -m 262145清楚共享semid=262145的共享内存。
执行ipcrm -s 884736清楚共享信号量semid=884736的共享信号量。
最后执行ipcs查看共享内存、共享队列,共享信号量信息,发现全都没有了,说明上面的ipcrm清楚共享内存和共享信号量成功