Chinaunix

标题: 如何根据共享内存段号码shmid查看pid [打印本页]

作者: hobby2273    时间: 2011-09-10 09:28
标题: 如何根据共享内存段号码shmid查看pid
通过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
作者: hobby2273    时间: 2011-09-11 16:26
顶起来, 各位大侠有知道的么?
作者: dooza    时间: 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创建和改变相关项的时间。
作者: hobby2273    时间: 2011-09-13 09:49
谢谢dooza的回复, 我知道在这种情况下可以通过ipcs -m -p pid返回的LPID查看进程,但是在正常的情况下, 比如一个oracle的shared memory segment, 可能nattch> 10, 这种情况下怎么根据shmid查看是哪些processes attach到这个shared memory segment呢? linux下有没有一个命令可以显示这些信息.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2