J'ai une bibliothèque partagée (fichier .so) sous UNIX. J'ai besoin de savoir ce que tous les processus en cours d'utilisation. Unix fournit-il un tel utilitaire/une telle commande?Tous les processus utilisent la bibliothèque partagée
Répondre
Vous pouvez inspecter le contenu de /proc/<pid>/maps
pour voir quels fichiers sont mappés dans chaque processus. Vous devrez inspecter tous les processus, mais qui est plus facile qu'il n'y paraît:
$ grep -l /lib/libnss_files-2.11.1.so /proc/*/maps
/proc/15620/maps
/proc/22439/maps
/proc/22682/maps
/proc/32057/maps
Cela ne fonctionne que sur le système de fichiers Linux /proc
, autant que je sache.
Une solution rapide serait d'utiliser la commande lsof
[[email protected]]# 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
Cela devrait fonctionner non seulement pour .so
fichiers, mais tous les autres fichiers, dirs, points de montage, etc.
N.B. lsof
affiche tous les processus qui utilisent un fichier, donc il y a une possibilité très faible d'un faux positif si un processus ouvre le fichier *.so
mais ne l'utilise pas réellement. Si c'est un problème pour vous, alors Marcelo's answer serait le chemin à parcourir.
Do dans tous les répertoires d'intérêt
ldd * >ldd_output
vi ldd_output
ensuite chercher le nom de la bibliothèque, par exemple "ALib.so". Ceci montre tous les modules liés par ex. "aLib.so"
Ceci est un excellent conseil. Merci Shawn. –