Какие процессы используют общую библиотеку? - PullRequest
3 голосов
/ 13 декабря 2010

У меня есть общая библиотека (.so файл) в UNIX.Мне нужно знать, что все запущенные процессы используют его.Предоставляет ли unix такую ​​утилиту / команду?

Ответы [ 3 ]

5 голосов
/ 13 декабря 2010

Вы можете просмотреть содержимое /proc/<pid>/maps, чтобы увидеть, какие файлы отображаются в каждом процессе. Вам придется проверять каждый процесс, но это проще, чем кажется:

$ grep -l /lib/libnss_files-2.11.1.so /proc/*/maps
/proc/15620/maps
/proc/22439/maps
/proc/22682/maps
/proc/32057/maps

Это работает только в файловой системе Linux /proc, AFAIK.

3 голосов
/ 13 декабря 2010

Быстрое решение - использовать команду lsof

[root@host]# lsof /lib/libattr.so.1
COMMAND     PID USER  FD   TYPE DEVICE  SIZE   NODE NAME
gdm-binar 11442 root mem    REG    8,6 30899 295010 /lib/libattr.so.1.1.0
gdm-binar 12195 root mem    REG    8,6 30899 295010 /lib/libattr.so.1.1.0

. Это должно работать не только для файлов .so, но и для любых других файлов, каталогов, точек монтирования и т. Д.

NB lsof отображает все процессы, которые используют файл, поэтому существует очень отдаленная вероятность ложного срабатывания, если это процесс, который открывает файл *.so, но фактически не использует его.Если это проблема для вас, то Ответ Марсело будет правильным решением.

0 голосов
/ 13 декабря 2010

Во всех каталогах интереса

ldd * >ldd_output
vi ldd_output

Затем найдите имя библиотеки, например, «ALib.so». Здесь показаны все модули, связанные, например, с "ALib.so"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...