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