Sco*_*ter 3 linux shared-memory
当打开共享内存对象(使用shm_open)时,为该对象提供名称.每个对象必须具有不同的名称.
有没有办法识别所有当前分配的共享对象的名称?如果是这样,怎么样?
更新:在我看来,这些(就像@HristoLliev所称的那样)系统V共享内存段. ipcs -m报告类似于我期望的段列表,但不显示名称.
shm_open(3)在Linux上依赖tmpfs,通常安装在/dev/shm.是什么shm_open()做的是通过与的挂载点前面加上对象名称转换为文件路径tmpfs文件系统.只要共享内存对象没有取消链接,它就会在文件系统中可见,您需要做的就是发出一个简单的ls命令:
$ ls /dev/shm
pulse-shm-1 pulse-shm-2 pulse-shm-3
...
Run Code Online (Sandbox Code Playgroud)
某些Linux发行版tmpfs安装在不同的挂载点下.为了找出问题所在,问题:
$ mount -t tmpfs
tmpfs on /dev/shm type tmpfs (rw)
Run Code Online (Sandbox Code Playgroud)
如果您想知道哪些进程已映射共享内存对象,该lsof命令是您的朋友:
$ lsof /dev/shm
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kded4 30657 hristo mem REG 0,16 67108904 294877 /dev/shm/pulse-shm-1
kded4 30657 hristo mem REG 0,16 67108904 294868 /dev/shm/pulse-shm-2
knotify4 30687 hristo mem REG 0,16 67108904 294876 /dev/shm/pulse-shm-3
pulseaudi 30717 hristo mem REG 0,16 67108904 294868 /dev/shm/pulse-shm-4
shm.x 31878 hristo DEL REG 0,16 305893 /dev/shm/asd
Run Code Online (Sandbox Code Playgroud)
未链接的共享对象在文件系统中不再可见,但如果通过某个进程映射它们可能仍然存在,就像上面列表中的最后一个进程一样 - DEL在该FD字段中表示相应的文件已被删除.
请注意,System V共享内存段(由其获得ipcs -m)位于不同的名称空间中,并且没有相应的对象名称,只有数字键.
| 归档时间: |
|
| 查看次数: |
5904 次 |
| 最近记录: |