假设,一个进程正在运行并访问 OPENSSL 共享库以执行一些操作。有没有办法找到这个进程的pid? 有什么方法可以找到此进程在哪个核心上运行?
如果可能,是否需要任何特殊权限,如 sudo 等?
操作系统- Debian/Ubuntu
最佳答案
根据您的具体需要,可能会执行以下操作:
lsof | grep /usr/lib64/libcrypto.so | awk '{print $1, $2}' | sort -u
这本质上是:
- 使用
lsof
列出系统上所有打开的文件 - 搜索 OpenSSL 库路径(它还捕获版本名称,如
libcrypto.so.1.0
) - 选择进程名和PID
- 删除所有重复条目
请注意,这还将输出使用共享库文件的先前实例的进程,例如更新到新版本然后删除。当一个进程有多个不同名称的线程时,它还有一个输出重复的小问题。
是的,这可能确实需要提升权限,具体取决于您的 /proc
目录的权限。
如果您真的需要处理器核心,您可以尝试这样的事情(归功于 dkaz ):
lsof | grep /usr/lib64/libcrypto.so | awk '{print $2}' |
xargs -r ps -L --no-headers -o pid,psr,comm -p | sort -u
将 lwp
变量添加到 ps
命令也会显示线程 ID:
lsof | grep /usr/lib64/libcrypto.so | awk '{print $2}' |
xargs -r ps -L --no-headers -o pid,lwp,psr,comm -p
PS:what-core-are-the-users-of-this-library-on 要求听起来还是有点不寻常。如果您从更广泛的角度提及您试图解决的问题,可能会更有用。
关于linux - 是否有可能在 linux 中找到哪个进程正在使用 OPENSSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35613262/