ipcs

unix/linux下的共享內存、信號量、隊列信息管理
在unix/linux下,經常有因爲共享內存、信號量,隊列等共享信息沒有乾淨地清楚而引起一些問題。
查看共享信息的內存的命令是ipcs [-m|-s|-q]。

默認會列出共享內存、信號量,隊列信息,-m列出共享內存,-s列出共享信號量,-q列出共享隊列
清除命令是ipcrm [-m|-s|-q] id。
-m 刪除共享內存,-s刪除共享信號量,-q刪除共享隊列。
[oracle@trade_as02 ~]$ ipcs -a
 
------ 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
共享內存段有時不能馬上刪除,需使用這個內存段的所有進程向OS發送detach命令時纔有釋放,此時可以考慮刪除進程使用的信號量,幫助釋放共享內存段
 
 
 
關鍵知識:信號量、資源釋放、ipcsipcrm
信號量又稱爲信號燈,它是用來協調不同進程間的數據對象的,而最主要的應用是共享內存方式的進程間通信。本質上,信號量是一個計數器,它用來記錄對某個資源(如共享內存)的存取狀況;共享內存是運行在同一臺機器上的間通信最快的方式,因爲數據不需要在不同的進程間複製。通常由一個進程創建一塊共享內存區,其餘進程對這塊內存區進行讀寫。在Linux系統下 常用的方式是通過shmXXX函數族來實現利用共享內存進行存儲的。 Shmget,類似於 malloc函數
相關知識:
ipcs可用來顯示當前Linux系統中的共享內存段、信號量集、消息隊列等的使用情況。
命令示例:
ipcs -aipc 顯示當前系統中共享內存段、信號量集、消息隊列的使用情況;
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章