手动删除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)的...
  • sunnydogzhou
  • sunnydogzhou
  • 2010年04月26日 19:57
  • 25847

linux 删除共享内存段

当linux服务器异常断电等情况重启时候,有时候会出现oracle 所占用的共享内存没有正常释放,这个时候在不重启服务器的前提下,需要手工删除共享内存段: 使用如下命令查看共享内存段信息: ipc...
  • killvoon
  • killvoon
  • 2016年05月04日 10:40
  • 591

共享内存查看清除命令ipcs和ipcrm

今天发生一个问题,在重启****的时候,使用了start命令,结果程序无论如何启动不了,最后的解决方法: 查看transmit的日志没有结果,于是查看其下nohup.out,有如下输出: .......
  • I_am_JoJo
  • I_am_JoJo
  • 2012年06月28日 09:51
  • 13013

linux 共享内存查看和删除

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

linux中共享内存使用过程中奇怪的问题:shmctl删除后其他进程不能再连接该共享内存

我初始化完共享内存后,马上使用 shmctl(shm_id, IPC_RMID, NULL)删除共享,这样其他进程都使用shmdt系统就自动删除该共享内存了。谁知道这样以来其他的进程怎么也连接不上该共...
  • imxiangzi
  • imxiangzi
  • 2012年05月21日 11:46
  • 2554

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

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。1.   shmget函数原型shmget(得到一个共享内存标识符或创建...
  • guoping16
  • guoping16
  • 2011年07月04日 17:38
  • 53539

shmget() -- 建立共享内存

shmget() -- 建立共享内存 #include #include int shmget(key_t key, size_t size, int shmflg); key...
  • rongwenbin
  • rongwenbin
  • 2013年06月19日 10:51
  • 548

Linux共享内存使用shmget

转至:http://blog.csdn.net/lanmanck/article/details/6092995 shmget int shmget(key_t key, size_t siz...
  • heart18335101121
  • heart18335101121
  • 2016年09月25日 19:02
  • 1649

linux中进程共享内存的2种方法

共享内存可以在两个或多个进程间共享一个给定的内存区域,因为数据不需要在进程之间复制,相比于pipe、socket、file等共享通信方式,共享内存是最快的一种共享机制。linux中共享内存一般有2种方...
  • shenyuflying
  • shenyuflying
  • 2016年11月20日 21:42
  • 1395

LINUX共享内存使用常见陷阱与分析

LINUX共享内存使用常见陷阱与分析 October 25, 20112 Comments 所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机...
  • killmice
  • killmice
  • 2014年11月26日 15:07
  • 7291
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手动删除shmget创建的共享内存
举报原因:
原因补充:

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