手动删除shmget创建的共享内存

转载 2015年07月09日 14:39:31
使用shmget创建或打开共享内存的时候,其中有一个参数是制定了权限的,这个权限类似于文件的权限。 指定了什么身份可以打开已经存在的共享内存。
 
在我的项目中出现了一个程序运行失败, 经过调查发现在使用shmget打开一段共享内存的时候没有权限, 造成这个原因先不管, 下面说一下如果出现这种情况,怎么删除掉已经创建的共享内存。
 
我使用的是linux系统, 可以使用ipcs -m查看已经存在的共享内存
[zhanghua@localhost lib]$ ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00068520 65538      root      666        2352       16
0x00068521 98307      root      666        624        13
0x0006c650 131076     nobody    666        408        11
0x0006c620 163845     root      666        81056      0
0x0006c766 196614     nobody    666        264        7
0x0006c6af 229383     root      666        408        11
0x0006c709 262152     root      666        264        7
其中:
key: shmget第一个参数
owner: 为共享内存的所有者
perms: 权限
bytes: 共享内存的大小
 
通过key找到自己程序创建的共享内存, 发现owner确实和程序运行的时候的身份不一致
 
怎么手动删除一个共享内存呢?
 
通过rpcrm -m shmid删除一个已经存在的共享内存
 
假如我们要删除key=0x0006c709 shmid=262152的共享内存,可以使用下面的命令完成:
ipcrm -m  262152



FROM:  http://blog.chinaunix.net/uid-345900-id-2131340.html

linux 下查看共享内存的使用以及删除共享内存

简单解释一下ipcs命令和ipcrm命令。取得ipc信息:ipcs [-m|-q|-s]-m 输出有关共享内存(shared memory)的信息-q 输出有关信息队列(message queue)的...

linux 共享内存查看和删除

在使用共享内存的程序异常退出时,由于没有释放掉共享内存,在调试时会出现错误。您可以使用shell命令来查看与释放已经分配的共享内存,下面将详细说明如何进行查看和释放分配的共享内存的方法。 预备知识 ...

Linux下使用awk批量删除共享内存

1.awk简介awk 是一个强大的文本分析工具。sed 常常用于一整个行的处理,而 awk 则倾向于以空格和tab键为默认分隔符将每行切片成一个个域(也就是一列)来处理。awk适用于小型的数据处理.a...

共享内存函数(shmget、shmat、shmdt、shmctl)及其范例

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。1.   shmget函数原型shmget(得到一个共享内存标识符或创建...

linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)

http://lobert.iteye.com/blog/1746041 shmget int shmget(key_t key, size_t size, int flag); ...

Tuxedo介绍

1、Tuxedo介绍                                                                                   Tuxedo...

为什么你的共享内存key为0且无法删除?

为什么你的共享内存key为0且无法删除?        因为:        你在进程使用共享内存的情况下, 删除了共享内存, 此时共享内存的key会变为0, 然后, 你再删除共享内存(key为0...
  • stpeace
  • stpeace
  • 2017年07月08日 16:28
  • 277

共享内存的创建和映射shmget()和shmat()

共享内存的实现分为两步: 1、创建共享内存,用到的函数是shmget(); 2、映射共享内存,就是把这段创建的共享内存映射到具体的进程空间去,使用的函数是:shmat(); 这样就可以使用不带缓...

Linux进程间通信源码剖析,共享内存(shmget函数详解)

转至:http://blog.csdn.net/lanmanck/article/details/6092995 shmget int shmget(key_t key, size_t siz...
  • wclin88
  • wclin88
  • 2011年12月24日 15:55
  • 12519

进程间通信---共享内存(shmget)

当然只有mmap是可以的,不过由于各种不同的系统的架构不一样,后来又经过整合,所以我们现在的linux有多种内存共享方案,下面在介绍一种非常常用的系统V内存方案。 本人首先再在上次的基础之上介绍一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手动删除shmget创建的共享内存
举报原因:
原因补充:

(最多只允许输入30个字)