如何通过/proc获取当前正在运行的进程信号量?

如何通过/proc获取当前正在运行的进程信号量?

我想知道如何获取当前正在运行信号量的进程/proc?我猜想通过 SysVIPC 子目录是可能的。但我不知道如何使用这个命令。

乌班图12.10

答案1

我处理信号量和共享内存的唯一经验是通过使用命令ipcs。看看IPCS 手册页更多细节。

此命令显示哪些进程有信号量:

$ ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x4d114854 65536      saml       600        8         

已知 semid 后,我们可以查询有关具有信号量的 PID 的附加信息(注意有 8 个 - nsems 列):

$ ipcs -s -i 65536

Semaphore Array semid=65536
uid=500  gid=501     cuid=500    cgid=501
mode=0600, access_perms=0600
nsems = 8
otime = Sun May 12 14:44:53 2013  
ctime = Wed May  8 22:12:15 2013  
semnum     value      ncount     zcount     pid       
0          1          0          0          0         
1          1          0          0          0         
2          1          0          0          2265      
3          1          0          0          2265      
4          1          0          0          0         
5          1          0          0          0         
6          1          0          0          4390      
7          1          0          0          4390 

pid 列就是这些进程。您可以使用ps或通过/proc文件系统查找它们,/proc/<pid>.

例如:

$ more /proc/2265/cmdline 
mono

POSIX 和 SystemV

根据 @lgeorget 留下的评论,我深入研究了 PID 2265 的/proc/2265/map内容,并找到了以下/dev/shm参考文献:

$ grep shm /proc/2265/maps 
7fa38e7f6000-7fa38ebdf000 rw-s 00000000 00:11 18517                      /dev/shm/mono-shared-500-shared_fileshare-grinchy-Linux-x86_64-40-12-0
7fa38f0ca000-7fa38f0cb000 rw-s 00000000 00:11 18137                      /dev/shm/mono.2265
7fa3967be000-7fa3967d3000 rw-s 00000000 00:11 18516                      /dev/shm/mono-shared-500-shared_data-grinchy-Linux-x86_64-328-12-0

相关内容