在unix/linux下,经常有因为共享内存、信号量,队列等共享信息没有干净地清楚而引起一些问题。
查看共享信息的内存的命令是ipcs [-m|-s|-q]。
清除命令是ipcrm [-m|-s|-q] id。
-m 删除共享内存,-s删除共享信号量,-q删除共享队列。
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x30024289 32768 futures 777 528384 1
0xca2fd414 491521 oracle 640 1730150400 16
------ Semaphore Arrays --------
key semid owner perms nsems
0x00028009 0 futures 666 1
0x0002800c 32769 futures 666 1
0x30024003 262146 futures 777 3
0x3002428a 294915 futures 777 2
0x3002428b 327684 futures 777 2
0x3002428c 360453 futures 777 2
0x3002428d 393222 futures 777 2
0x3002428e 425991 futures 777 2
0x52dff7d0 3964936 oracle 640 151
0x52dff7d1 3997705 oracle 640 151
0x52dff7d2 4030474 oracle 640 151
0x52dff7d3 4063243 oracle 640 151
0x52dff7d4 4096012 oracle 640 151
------ Message Queues --------
key msqid owner perms used-bytes messages
ipcs可用来显示当前Linux系统中的共享内存段、信号量集、消息队列等的使用情况。
命令示例:
ipcs -a或ipc 显示当前系统中共享内存段、信号量集、消息队列的使用情况;
ipcs -m 显示共享内存段的使用情况;
ipcs -s 显示信号量集的使用情况;
ipcs -q 显示消息队列的使用情况;
ipcrm可用来删除对应的共享内存段、信号量、消息队列;
命令示例:
ipcrm -s semid 删除对应的信号量集
ipcrm -m shmid 删除对应的共享内存段
ipcrm -q msqid 删除对应的消息队列
ipcrm本身只能实现单个资源的删除,利用以下命令可实现批量删除(zhangsj版权所有,呵呵):
1.ipcs -s|grep 用户名|cut -d" " -f2|xargs -n1 ipcrm -s
2.ipcs -s|awk '/用户名/{print $2}'|xargs -n1 ipcrm -s
3.ipcs -s|awk '/用户名/{system("ipcrm -s "$2)}'
4.for i in echo `ipcs|grep 用户名|cut -d" " -f2`; do ipcrm -s $i; done
source:http://dobzhu7781.spaces.live.com/blog/cns!4817887C779350C9!267.entry