免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 17955 | 回复: 3
打印 上一主题 下一主题

如何根据共享内存段号码shmid查看pid [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-10 09:28 |只看该作者 |倒序浏览
通过ipcs -m可以看到共享内存段的信息, 但是Linux下如何根据shmid查看是哪些进程在使用这个共享内存段? 我知道在hpux下有个shminfo的命令, 但是在linux上没找到,请各位大侠指教:

[oracle@capaa ~]$ ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x00000000 917504     oracle    600        196608     2          dest        
0x00000000 950273     oracle    600        196608     2          dest        
0x00000000 983042     oracle    600        196608     2          dest        
0x00000000 1015811    oracle    600        196608     2          dest        
0x00000000 1081349    oracle    600        196608     2          dest        
0x00000000 1179656    oracle    600        196608     2          dest        
0x4cd26024 524300     oracle    640        562044928  55                     
0x00000000 1900559    oracle    600        12288      2          dest        
0x00000506 1802260    oracle    666        16384      0                     
0x00000000 1835029    oracle    600        196608     2          dest

论坛徽章:
0
2 [报告]
发表于 2011-09-11 16:26 |只看该作者
顶起来, 各位大侠有知道的么?

论坛徽章:
0
3 [报告]
发表于 2011-09-13 00:15 |只看该作者
[oracle@test /home/oracle]
$ ipcs -m

—— Shared Memory Segments ——–
key                          shmid     owner   perms   bytes                 nattch   status
0×00000000     458752     oracle      640       30083645440   1              dest
0x0161dbac      491521     oracle      640       20084424704   784
在这个例子当中,可以看到有两个shared memory segment被分配。其中键值为458752的状态为dest(destroy),表示该shared memory segment已被标识为destroy,这是由于oracle的非正常关闭造成的。要注意的地方是nattch,表示连接在关联的共享内存段的进程数,这里的值为1,还有一个进程连接在这个shared memory segment上,如果贸然移除这个shared memory segment,可能存在一定的风险。可以通过以下方式查看该shared memory segment的详细信息:

[oracle@test /home/oracle]
$ ipcs -m -i 458752

Shared memory Segment shmid=458752
uid=501 gid=501 cuid=501 cgid=501
mode=01640 access_perms=0640
bytes=30083645440 lpid=10306 cpid=10941 nattch=1
att_time=Wed Aug 10 11:07:48 2011
det_time=Wed Aug 10 11:50:21 2011
change_time=Fri Apr 2 07:07:31 2010
其中一些关键参数说明如下:

■CPID 共享内存项的创建程序的进程标识。
■LPID 连接或者拆离共享内存段的最后一个进程的标识。
■ATT_TIME 最后一次与关联的共享内存段完成连接的时间。
■DET_TIME 最后一次与关联的共享内存段完成拆离的时间。
■CHANGE_TIME创建和改变相关项的时间。

论坛徽章:
0
4 [报告]
发表于 2011-09-13 09:49 |只看该作者
谢谢dooza的回复, 我知道在这种情况下可以通过ipcs -m -p pid返回的LPID查看进程,但是在正常的情况下, 比如一个oracle的shared memory segment, 可能nattch> 10, 这种情况下怎么根据shmid查看是哪些processes attach到这个shared memory segment呢? linux下有没有一个命令可以显示这些信息.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP