在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

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

  1. linux共享内存原IPCS,linux调试工具ipcs的深入分析

    用ipcs调试共享内存 测试源程序如下: #include #include #include #include #include #include #include void error_out(c ...

  2. linux shared,从 0 开始学习 Linux 系列之「22.共享内存 Shared Memory」

    共享内存 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! 共享内存 Shared Memory 这次我们来学习在 Linux 中最快的一种 IPC 方式:共 ...

  3. Linux进程间通信详解(四) —— 共享内存及函数

    共享内存的概念 共享内存是指多个进程可以把一段内存共同的内存映射到自己的进程空间中,从而实现数据的共享和传输,它是存在与内核级别的一种资源,是所有进程间通信中方式最快的一种. 在shell环境下可以使 ...

  4. linux进程间通信:system V 共享内存

    文章目录 思维导图如下 通信原理 优势 运行流程 编程接口 编程实例 思维导图如下 通信原理 多个进程共享物理内存的同一块区域(通常称之为"段":segment) 抛弃了内核态消息 ...

  5. linux map内存在哪里分配,brk  mmap  madvise 内存分配以及共享内存

    mmap() vs read()/write()/lseek() 通过strace统计系统调用的时候,经常可以看到mmap()与mmap2().系统调用mmap()可以将某文件映射至内存(进程空间), ...

  6. 【Linux】进程间通信--systemV标准--共享内存

    文章目录 systemV 标准 共享内存通信原理 共享内存的理解 共享内存的创建--shmget函数 查看共享内存和释放共享内存方式 挂在共享内存--shmat函数 去挂在共享内存--shmdt函数 ...

  7. [Linux学习]Linux下进程通讯之共享内存

    本文用两份代码,一个创建共享内存并向其中写入相关的数据,一个获取共享内存并读取其中的数据,下面上代码: server.c:获取共享内存,并向共享内存中写入数据 #include <sys/typ ...

  8. 【Linux系统编程】进程间通信--共享内存

    概述 共享内存是进程间通信中最简单的方式之一.共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针.当一个进程改变了这块地址中的内容的时 ...

  9. oracle共享池的结构,Oracle 10g内存结构之共享池的相关知识及使用简介

    Oracle 10g内存结构之共享池的相关知识及使用简介 之前我们介绍了:Oracle 10g内存结构之系统全局区简介,本文我们接着介绍一下Oracle 10g内存结构之共享池的相关知识,接下来就让我 ...

最新文章

  1. docker 建mysql
  2. Code Valley团队拟在澳洲建立一座价值5000万美元的BCH科技园
  3. c++ :MFC opencv使用namedWindow,imshow出现两个窗口
  4. web developer tips (70):使用命令脚本安装IIS7
  5. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库...
  6. java基础之ConcurrentHashMap
  7. if函数python_pythonif函数
  8. go中make、new和直接var的区别
  9. 网络爬虫之Java基础篇(Ⅱ)
  10. 安卓JNI开发-01
  11. git使用笔记(一)入门
  12. Object-C 函数参数语法
  13. 用爬虫的底子两天做了一个简单的网页(新手版)
  14. 10种舒服的颜色及配色推荐
  15. [codevs1746][NOI2002] 贪吃的九头龙 树形DP
  16. 数据库指南-SQL与NoSQL
  17. 【批量图片识别文字命名】如何批量图片识别文字并将识别的文字重命名该图片,怎么弄?下面叫你方法
  18. 杰理之唤醒源获取【篇】
  19. 云原生CI/CD:Tekton/pipelin之pipeline概念篇
  20. 连接网上邻居中的电脑时,总是提示需要输入用户名和密码?

热门文章

  1. deepin终端编译c程序_大神支招 如何在Linux下运行C语言程序
  2. 计讯物联宝贝王手工大赛投票结果正式揭晓,速速围观!
  3. 第三章 Jupyter 的安装及使用
  4. 道路分割 matlab,MATLAB图像的道路分割技术研究
  5. c语言用栈编写计算器程序,用c语言实现简易的计算器四则运算的代码最好用栈方法实现,该怎么解决...
  6. 川西云南行散记之四《新都桥至稻城的路上》
  7. sed删除匹配行到最后的行。
  8. 【个人笔记】关于string头文件
  9. 旅行中........
  10. xutils3的https配置与验证