web-dev-qa-db-fra.com

Comment voir les objets partagés actuellement dans Linux?

J'ai deux questions liées:

  • Comment voir si une bibliothèque partagée est actuellement chargée? (c.-à-d. système, agnostique de processus)
  • Comment voir toutes les bibliothèques partagées chargées par un processus?
30
Max

Vous pouvez faire les deux avec lsof. Pour voir quels processus ont une bibliothèque ouverte ou mappée, faites:

lsof /path/to/lib.so

et pour voir quels fichiers (y compris les bibliothèques partagées) un processus est ouvert et/ou mappé, faites:

lsof -p <pid>
34
TomH

Une autre façon de voir ce qui est chargé dans un processus consiste à consulter le fichier /proc/PID/maps. Cela montre tout ce qui est mappé dans votre espace d'adressage, y compris les objets partagés mappés.

22
Rich Homolka
Sudo grep libcairo.so /proc/*/maps

est un bon moyen d’explorer tous les /proc/PID/mapsmentionnés par Rich en même temps. Exemple de sortie:

/proc/8390/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6

awk et bash-fu peuvent affiner le résultat.

Cette méthode affiche également les bibliothèques ouvertes avec dlopen, testées avec cette configuration minimale piratée avec un sleep(1000) sur Ubuntu 18.04.

Vous pouvez exécuter la commande suivante par root et voir une liste complète,

cat /proc/*/maps | awk '{print $6;}' | grep '\.so' | sort | uniq

Ceci est pour les utilisateurs qui n'ont pas lsof.

4
Nobutarou