所有进程都使用共享库

时间:2010-12-13 12:02:43

标签: unix

我在UNIX上有一个共享库(.so文件)。 我需要知道所有正在运行的进程正在使用它。 unix是否提供任何此类实用程序/命令?

3 个答案:

答案 0 :(得分:5)

您可以检查/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。

答案 1 :(得分:3)

快速解决方案是使用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文件,还适用于任何其他文件,目录,挂载点等。

N.B。 lsof显示使用文件的所有进程,因此如果进程打开*.so文件但实际上没有使用它,则可能会出现误报。如果这对您来说是一个问题,那么Marcelo's answer就是您的选择。

答案 2 :(得分:0)

在所有感兴趣的目录中进行

ldd * >ldd_output
vi ldd_output

然后查找库名称,例如“aLib.so”。这显示了与例如链接的所有模块“aLib.so”

相关问题