Как получить процессы, в настоящее время работающие с семафорами, через / proc?
16
Интересно, как получить процессы, в которых в настоящее время выполняются семафоры /proc? Я предполагаю, что это возможно подкаталогом SysVIPC. Но я не знаю, как использовать эти команды.
В /proc/PID/maps, вы можете увидеть отображение памяти процесса, и семафоры POSIX отображаются в виде вложенных файлов в /dev/shm. Я не уверен насчет семафоров SysV.
lgeorget
@lgeorget и я подтвердили, что семафоры POSIX и SysV действительно отображаются в /proc/PID/mapsфайле для данного PID.
SLM
Но, по-видимому, фрагменты общей памяти также отображаются в виде записей, /dev/shmи они довольно неотличимы от семафоров (за исключением случаев, когда у них есть умные имена).
lgeorget
Ответы:
21
Мой единственный опыт работы с семафорами и общей памятью - использование команды ipcs. Посмотрите man-страницу ipcs для более подробной информации.
Эта команда показывает, какие процессы имеют семафоры:
Насколько я знаю, только семафоры System V (те, которые вы получаете semget(2)) отображаются, ipcs -sпоэтому, если вы используете семафоры POSIX (те, которые вы получаете sem_open(2)), вы должны использовать другой метод.
lgeorget
Знаете какие-нибудь команды терминала, которые будут возвращать разновидность sem_open (2)? Просто любопытно. Все, что я знаю о семафорах, находится в ответе выше 8-).
SLM
Нет, это проблема. ;) Как ipcsсказано на man-странице: «Утилита Linux ipcs не полностью совместима с утилитой POSIX ipcs». так что я не уверен, что они даже подумали о POSIX IPC. Возможно будущий выпуск ipcs:).
lgeorget
содержание mapобоих семафоров мысли, верно?
SLM
Полагаю, что так. Так или иначе, семафоры должны быть прикреплены где-то в памяти процесса. Но я не был уверен, что семафоры SysV также были созданы в псевдофайловой системе /dev/shm. Теперь у нас есть ответ. :)
/proc/PID/maps
, вы можете увидеть отображение памяти процесса, и семафоры POSIX отображаются в виде вложенных файлов в/dev/shm
. Я не уверен насчет семафоров SysV./proc/PID/maps
файле для данного PID./dev/shm
и они довольно неотличимы от семафоров (за исключением случаев, когда у них есть умные имена).Ответы:
Мой единственный опыт работы с семафорами и общей памятью - использование команды
ipcs
. Посмотрите man-страницу ipcs для более подробной информации.Эта команда показывает, какие процессы имеют семафоры:
С известной полуидой мы можем запросить дополнительную информацию о PID, которые имеют семафоры (обратите внимание, что есть 8 - столбец nsems):
Столбец pid - это эти процессы. Вы можете просмотреть их, используя
ps
или просмотреть/proc
файловую систему/proc/<pid>
.Например:
POSIX & SystemV
Основываясь на комментарии, оставленном @lgeorget, я покопался в
/proc/2265/map
содержимом своего PID 2265 и нашел следующие/dev/shm
ссылки:источник
semget(2)
) отображаются,ipcs -s
поэтому, если вы используете семафоры POSIX (те, которые вы получаетеsem_open(2)
), вы должны использовать другой метод.ipcs
сказано на man-странице: «Утилита Linux ipcs не полностью совместима с утилитой POSIX ipcs». так что я не уверен, что они даже подумали о POSIX IPC. Возможно будущий выпускipcs
:).map
обоих семафоров мысли, верно?/dev/shm
. Теперь у нас есть ответ. :)