有没有办法检查正在运行的进程在使用哪些库?
更具体地说,如果程序使用dlopen加载某些共享库,则readelf或ldd不会显示它。是否有可能从正在运行的进程中获取该信息?如果是,怎么办?
其他人在正确的道路上。这有几种方法。
cat /proc/NNNN/maps | awk '{print $6}' | grep '\.so' | sort | uniq
或者,使用strace:
strace CMD.... 2>&1 | grep -E '^open(at)?(.*\.so'
这两个都假定共享库的路径中的某个位置带有“ .so”,但是您可以对其进行修改。第一个给出了相当漂亮的输出,只是一个库列表,每行一个。第二个库将在打开库时继续列出库,这很好。
当然lsof…
lsof
lsof -p NNNN | awk '{print $9}' | grep '\.so'