有没有办法检查正在运行的进程正在使用哪些库?
更具体地说,如果程序使用 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 -p NNNN | awk '{print $9}' | grep '\.so'
关于c++ - 如何检查给定进程在运行时加载了哪些共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934274/