ipcs 命令
报告进程间通信设施状态。
ipcs [ -m] [ -q] [ -s] [ -S] [ -P] [ -l] [ -a | -b -c -o -p -t] [ -T] [ -C CoreFile] [ -N Kernel ]
ipcs 命令往标准输出写入一些关于活动进程间通信设施的信息。如果没有指定任何标志,ipcs 命令用简短格式写入一些关于当前活动消息队列、共享内存段、信号量、远程队列和本地队列标题。
列标题和在 ipcs 命令中的列的含义列在下面。圆括号内的字母表示导致对应的报头出现的标志。all 设计符表示始终显示报头。这些标志仅仅确定提供给每个设备何种信息。但它们并不确定将列出哪些设备。
消息队列
共享内存段
信号量
KEY (all)用作 msgget 子例程、semget 子例程或者 shmget 子例程的参数的键构成了设施项。
注: 当删除内存段时,共享内存段的密钥改变为 IPC_PRIVATE,直到所有附加在段上的进程和它拆离。
MODE (all)设施访问方式和标志。这种方式由 11 个字符组成,解释如下:
前两个字符如下所示:
如果进程在等待 msgrcv 系统调用。
如果进程在等待 msgsnd 系统调用。
如果有关的共享内存段被删除。当附加在段上的最后一个进程拆离后它就会消失。
当第一个附加进程运行时,如果有关的共享内存段被清空。
如果没有设置相应的特定标志。
接下来的九个字符作为每三个一组解释。第一组是指拥有者有许可权;第二组是指在设施项的用户组中其他用户的许可权;最后一组指所有的用户。在每组中,第一个字符表示允许读,第二个字符表示可以写或者修改设施项,最后一个字符当前没有用过。
如果授予了读许可权。
如果授予了写许可权。
如果授予了修改许可权。
如果没有授予指定的许可权。
注: 对于 OWNER、GROUP、CREATOR 和 CGROUP,显示用户和组的标识而不显示登录名。
如:
sckj-1:/home/hebapp>ipcs
IPC status from /dev/mem as of Mon Jan 4 14:29:22 BEIST 2010
T ID KEY MODE OWNER GROUP
Message Queues:
q 0 0x4107001c -Rrw-rw---- root printq
Shared Memory:
m 0 0x58001330 --rw-rw-rw- root system
m 1 0xe4663d62 --rw-rw-rw- imnadm imnadm
m 2 0x9308e451 --rw-rw-rw- imnadm imnadm
m 3 0x52e74b4f --rw-rw-rw- imnadm imnadm
m 4 0xc76283cc --rw-rw-rw- imnadm imnadm
m 5 0x298ee665 --rw-rw-rw- imnadm imnadm
m 6 0xffffffff --rw-rw---- root system
m 7 0x0d0012b3 --rw-rw-rw- root system
m 8 0x25000002 --rw-rw---- gsapp staff
Semaphores:
s 262144 0x58001330 --ra-ra-ra- root system
s 1 0x44001330 --ra-ra-ra- root system
s 131074 0xe4663d62 --ra-ra-ra- imnadm imnadm
s 3 0x6200120d --ra-r--r-- root system
s 4 0xffffffff --ra-ra-ra- imnadm imnadm
s 5 0xffffffff --ra-ra-ra- imnadm imnadm
s 131078 0x01001175 --ra------- root system
s 131079 0x660043ea --ra-ra-r-- root system
ipcrm 命令
ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q MessageKey ] [ -s SemaphoreID ] [ -S SemaphoreKey ]
ipcrm 命令删除一个或更多的消息队列、信号量集或者共享内存标识。
删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。 | |
删除用关键字 SharedMemoryKey 创建的共享内存标识。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。 | |
删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。 | |
删除由关键字 MessageKey 创建的消息队列标识和与其相关的消息队列和数据结构。 | |
删除信号量标识 SemaphoreID 和与其相关的信号量集及数据结构。 | |
删除由关键字 SemaphoreKey 创建的信号标识和与其相关的信号量集和数据结构。 |
msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 ipcs 命令找到。
如果要删除和 SharedMemoryID 18602 相关的共享内存段,请输入:
取得ipc信息:
ipcs [-m|-q|-s]
-m 输出有关共享内存(shared memory)的信息
-q 输出有关信息队列(message queue)的信息
-s 输出有关“遮断器”(semaphore)的信息
# ipcs –m
IPC status from as of 2007年04月10日 星期二 18时32分18秒 CST
T ID KEY MODE OWNER GROUP
Shared Memory:
m 0 0x50000d43 --rw-r--r-- root root
m 501 0x1e90c97c --rw-r----- oracle dba
#ipcs |grep oracle
m 501 0x1e90c97c --rw-r----- oracle dba
删除ipc(清除共享内存信息)
ipcrm -m|-q|-s shm_id
%ipcrm -m 501
for i in `ipcs |grep oracle|awk '{print $2}'`
do
ipcrm -m $i
ipcrm -s $i
done