unix/linux下的共享內存、信號量、隊列信息管理
在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本身只能實現單個資源的刪除,利用以下命令可實現批量刪除:
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