Як отримати процеси, які зараз працюють семафорами, через / proc?


16

Цікаво, як отримати процеси, на яких зараз працюють семафори /proc? Я думаю, що це можливо в підкаталозі SysVIPC. Але я не знаю, як використовувати ці команди.

Ubuntu 12.10


1
У ньому /proc/PID/mapsви можете бачити відображення пам'яті процесу і семафори POSIX відображаються як додані файли в /dev/shm. Я не впевнений у семафорах SysV.
lgeorget

@lgeorget і я підтвердили, що і семафори POSIX, і SysV насправді відображаються у /proc/PID/mapsфайлі для заданого PID.
slm

Але, мабуть, фрагменти спільної пам'яті також відображаються як записи, /dev/shmі вони досить не відрізняються від семафорів (за винятком випадків, коли вони мають розумні назви).
lgeorget

Відповіді:


22

Мій єдиний досвід роботи з семафорами та спільною пам'яттю - це використання команди ipcs. Подивіться на сторінку ipcs man для отримання більш детальної інформації.

Ця команда показує, які процеси мають семафори:

$ ipcs -s

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

За допомогою відомого напівмісяця ми можемо запитати додаткову інформацію про 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, я заглибився у /proc/2265/mapвміст свого PID 2265 і знайшов такі /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

Наскільки я знаю, відображаються лише семафори System V (ті, з якими ви отримуєте semget(2)), ipcs -sтож якщо ви використовуєте семафори POSIX (ті, з ким ви отримуєте sem_open(2)), вам потрібно використовувати інший метод.
lgeorget

Знаєте про якісь термінальні команди, які повернуть різноманітність sem_open (2)? Просто цікаво. Все, що я знаю про семафори, є у відповіді вище 8-).
slm

Ні, це проблема. ;) Як ipcsговориться на сторінці сторінки: "Утиліта ipcs Linux не повністю сумісна з утилітою POSIX ipcs." тож я не впевнений, що вони навіть щось придумали для POSIX IPC. Можливо, майбутній реліз ipcs:).
lgeorget

зміст mapсемафорів обох різновидів думки, правда?
slm

Я так гадаю. Так чи інакше, семафори повинні бути прикріплені десь у пам'яті процесу. Але я не був впевнений, що семафори SysV створені також у псевдофайловій системі /dev/shm. Тепер у нас є відповідь. :)
lgeorget
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.