当前位置: 首页 > 工具软件 > ipcs > 使用案例 >

linux共享内存原IPCS,共享内存相关(ipcs/ipcrm)

洪子晋
2023-12-01

在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

 类似资料: