And*_*ner 40 linux memory shared memory-management
如何确定哪个进程附加到共享内存段?
awagner@tree:/home/awagner$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 root 777 102400 1
0x00000000 32769 root 774 96 1 dest
0x00000000 98306 awagner 600 393216 2 dest
0x00000000 131075 awagner 600 393216 2 dest
Run Code Online (Sandbox Code Playgroud)
即如何确定哪个两个进程附加到shmid 98306?
pax*_*blo 42
我认为你不能用标准工具做到这一点.您可以使用ipcs -mp获取最后一个进程附加/分离的进程ID,但我不知道如何获取所有附加进程ipcs.
假设两个进程附加的段,假设它们都保持连接,你可以从创建者PID cpid和最后附加的PID中找出lpid这两个进程,但不会扩展到两个以上进程,因此它的用处有限.
该cat /proc/sysvipc/shm方法似乎有限,但我相信有一种方法可以与/proc文件系统的其他部分一起使用,如下所示:
当我grep在procfs地图上为所有进程执行操作时,我会获得包含cpid和lpid进程的行的条目.
例如,我从以下位置获得以下共享内存段ipcs -m:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 123456 pax 600 1024 2 dest
Run Code Online (Sandbox Code Playgroud)
并且,对于给定的共享存储器段(123456)ipcs -mp,它cpid是3956并且lpid是9999.
然后,通过命令grep 123456 /proc/*/maps,我看到:
/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted)
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted)
Run Code Online (Sandbox Code Playgroud)
因此,有是一个办法让连接到它的过程.我很确定dest状态和(deleted)指标是因为创建者在最终分离发生后已将该段标记为销毁,而不是已经被销毁.
因此,通过扫描/proc/*/maps"文件",您应该能够发现当前附加到给定段的PID.
cha*_*ess 23
给出上面的例子 - 找到附加到shmid 98306的进程
lsof | egrep "98306|COMMAND"
Run Code Online (Sandbox Code Playgroud)
小智 5
我写了一个名为 who_attach_shm.pl 的工具,它解析 /proc/[pid]/maps 以获取信息。你可以从github下载
示例输出:
shm attach process list, group by shm key
##################################################################
0x2d5feab4: /home/curu/mem_dumper /home/curu/playd
0x4e47fc6c: /home/curu/playd
0x77da6cfe: /home/curu/mem_dumper /home/curu/playd /home/curu/scand
##################################################################
process shm usage
##################################################################
/home/curu/mem_dumper [2]: 0x2d5feab4 0x77da6cfe
/home/curu/playd [3]: 0x2d5feab4 0x4e47fc6c 0x77da6cfe
/home/curu/scand [1]: 0x77da6cfe
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120100 次 |
| 最近记录: |