关闭

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

896人阅读 评论(0) 收藏 举报
分类:
使用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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2097019次
    • 积分:21194
    • 等级:
    • 排名:第377名
    • 原创:13篇
    • 转载:1756篇
    • 译文:1篇
    • 评论:197条
    文章分类
    最新评论