Linux

如何通過 /proc 獲取目前執行信號量的程序?

  • September 23, 2016

我想知道如何獲取目前執行信號量的程序/proc?我想這可能是通過 SysVIPC 子目錄。但我不知道如何使用這個命令。

Ubuntu 12.10

我在處理信號量和共享記憶體方面的唯一經驗是使用命令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

引用自:https://unix.stackexchange.com/questions/75547