Linux - 使用 IPC 通道检查进程

Linux - 使用 IPC 通道检查进程

这和我之前的相关问题

鉴于我可以找到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参阅完整故事。

相关内容