Chinaunix首页 | 论坛 | 博客
  • 博客访问: 277943
  • 博文数量: 46
  • 博客积分: 2021
  • 博客等级: 大尉
  • 技术积分: 406
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-03 13:00
文章分类

全部博文(46)

文章存档

2011年(1)

2010年(9)

2009年(2)

2007年(13)

2006年(21)

我的朋友

分类: LINUX

2010-01-15 14:27:11

使用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
 
 
阅读(5692) | 评论(0) | 转发(0) |
0

上一篇:期待Libevent 2.0 stable

下一篇:erlang学习笔记

给主人留下些什么吧!~~