共享記憶體相關(ipcs/ipcrm)

shilei1發表於2014-07-17

在Linux程式通訊中,共享記憶體的應用是比較普遍,把自己學習過的資料作一個小結吧!

      共享記憶體是系統出於多個程式之間通訊的考慮,而預留的的一塊記憶體區。在/proc/sys/kernel/目錄下,記錄著共享記憶體的一些限制,如一個共享記憶體區的最大位元組數shmmax,系統範圍內最大共享記憶體區識別符號數shmmni等,可以手工對其調整,但不推薦這樣做。

注意:在使用共享記憶體,結束程式退出後。如果你沒在程式中用shmctl()刪除共享記憶體的話,一定要在命令列下用ipcrm命令刪除這塊共享記憶體。你要是不管的話,它就一直在那兒放著了。
簡單解釋一下ipcs命令和ipcrm命令。

取得ipc資訊:
ipcs [-m|-q|-s]
-m      輸出有關共享記憶體(shared memory)的資訊
-q      輸出有關資訊佇列(message queue)的資訊
-s      輸出有關“遮斷器”(semaphore)的資訊
%ipcs -m

刪除ipc
ipcrm -m|-q|-s shm_id
%ipcrm -m 105
---------------------------------

共享記憶體是一種非常重要且常用的程式間通訊方式,相對於其它IPC機制,因其速度最快、效率最高,被廣泛應用於各類軟體產品及應用開發中。System V IPC 為UNIX平臺上的共享記憶體應用制定了統一的API標準,從而為在UNIX/Linux平臺上進行跨平臺開發提供了極大的便利;開發人員基於一套基本相同的原始碼,便可開發出同時支援AIX、Solaris、HP-UX、Linux等平臺的產品。

$ ipcs -ma
IPC status from /dev/mem as of Thu Jul 17 08:48:39 BEIST 2014
T        ID     KEY        MODE       OWNER    GROUP  CREATOR   CGROUP NATTCH     SEGSZ  CPID  LPID   ATIME    DTIME    CTIME 
Shared Memory:
m         0 0x5800120c --rw-rw-rw-     root   system     root   system      1 134217728 19838 32766 14:08:54 14:08:54 14:08:54
m    131073 0x16fd87e8 --rw-r-----   oracle      dba   oracle      dba      9 218415104 49796 64370  8:48:29  8:48:29 14:10:02
m    131074 0x78054448 --rw-r-----   oracle      dba   oracle      dba      6 106184704 46206 82892  1:40:19  1:40:19 14:09:54
m    131075 0xffffffff --rw-rw----     root   system     root   system      1      4096 43874 43874  8:48:22  8:48:22 14:09:52
m         4 0x6953e7d8 --rw-r-----   oracle      dba   oracle      dba      9 303316992 54184 64436  1:37:49  1:37:49 14:10:08
m         5 0x47f35784 --rw-r-----   oracle      dba   oracle      dba      9 504643584 59096 78314  1:35:18  1:35:18 14:10:22
m         6 0xffffffff --rw-------     root   system     root   system      0 268435456 62182 62182 14:10:31  9:01:06 14:10:31
m    262151 0xffffffff --rw-------     root   system     root   system      1 268435456 79010 79010  9:01:47 no-entry  9:01:47
m         8 0x0d0004da --rw-rw-rw-     root   system     root   system      1      1440 45784 62354  8:45:31  8:45:31 14:34:43



ipcs:check the shared memory allocation on a system
ipcrm:manually deallocate shared memory on a system

 
取得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|awk   '{print $2}
    501

刪除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

ps -ef|egrep "ora_|asm_"|grep -v grep |grep -v crs|awk '{print $2}' |xargs kill -9


取得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|awk  '{print $2}

   501

刪除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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-1220947/,如需轉載,請註明出處,否則將追究法律責任。

相關文章