这和我之前的相关问题。
鉴于我可以找到Linux系统中IPC通道的统计信息(例如sys V IPC),我如何找到哪些进程正在使用某些IPC通道(通过通道发送;通常在命令输出中提到接收器)。
例如,ipcs
给我机器上共享内存 ID 的列表。如何找到哪些进程正在使用该共享内存?
我感兴趣的其他 IPC(这些是我用来查找统计信息的命令):
- 管道:
lsof | grep pipe
- UNIX 域套接字:
netstat -n
答案1
您也可以使用ipcs
,但添加额外的选项:
wouter@gangtai:~$ ipcs
------ Message Queues --------
key msqid owner perms used-bytes messages
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x0052e2c1 32768 postgres 600 56 20
0x00000000 17924097 wouter 600 33554432 2 dest
0x00000000 49446914 wouter 600 524288 2 dest
[...]
wouter@gangtai:~$ ipcs -i 17924097 -m -p
Shared memory Segment shmid=17924097
uid=1000 gid=1000 cuid=1000 cgid=1000
mode=01600 access_perms=0600
bytes=33554432 lpid=3808 cpid=1457 nattch=2
att_time=Fri Jul 3 10:43:28 2015
det_time=Fri Jul 3 10:43:28 2015
change_time=Fri Jul 3 10:03:00 2015
lpid
是“最后访问者”PID;cpid
是“创建者”PID。
该-i
参数需要您要检查的 IPC 对象(共享内存段、消息队列或信号量)的 id。该-m
标志是因为我们正在检查内存段,并且表示-p
我们想要查看进程 ID。
请man ipcs
参阅完整故事。