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