Общая память POSIX: узнайте, подключен ли кто-либо к сегменту - PullRequest
1 голос
/ 13 июля 2011

В разделяемой памяти System V (shmget()) можно узнать, сколько пользователей подключено к сегменту, используя shmctl(... IPC_STAT ...) и считывая поле shm_nattch результирующей структуры данных.

С разделяемой памятью POSIX (shm_open()), есть ли способ сделать что-то подобное или, по крайней мере, узнать, кто-нибудь подключен?

1 Ответ

1 голос
/ 18 июля 2011

Есть по крайней мере один способ, несколько громоздкий и, вероятно, не совсем переносимый. Вы можете сканировать /proc файловую систему в поисках процессов, у которых открыт этот объект SHM. Используйте readlink на "/proc/<self-PID>/fd/<shm-FD>", чтобы получить путь к объекту, а затем отсканируйте символические ссылки "/proc/[0-9]+/fd/*, сравнивая имена файлов, на которые они указывают, или, что еще лучше, номера устройств и узлов, возвращаемые stat. Или вы можете просто делегировать эта задача для fuser утилиты и разобрать ее вывод.

...