是否可以在 linux 中找到哪个进程正在使用 OPENSSL?

Is it possible to find which process is using OPENSSL in linux?

假设,一个进程是运行并且访问OPENSSL共享库来执行一些操作。有什么办法可以找到这个进程的 pid 吗? 有什么方法可以在 上找到 这个过程是 运行 的哪个核心?

如果可能的话,是否需要任何特殊权限,如 sudo 等?

OS- Debian/Ubuntu

根据您的具体需求,可能会这样:

lsof | grep /usr/lib64/libcrypto.so | awk '{print , }' | sort -u

这本质上是:

  1. 使用lsof列出系统上所有打开的文件
  2. 搜索 OpenSSL 库路径(它也捕获像 libcrypto.so.1.0 这样的版本名称)
  3. 选择进程名和PID
  4. 删除所有重复条目

请注意,这还将输出使用共享库文件的先前实例的进程,例如更新到新版本然后删除。当一个进程有多个不同名称的线程时,它还有一个输出重复的小问题。

是的,这可能确实需要提升权限,具体取决于您的 /proc 目录的权限。

如果您确实需要处理器内核,您可以尝试这样的操作(归功于 ):

lsof | grep /usr/lib64/libcrypto.so | awk '{print }' |
    xargs -r ps -L --no-headers -o pid,psr,comm -p | sort -u

lwp 变量添加到 ps 命令也会显示线程 ID:

lsof | grep /usr/lib64/libcrypto.so | awk '{print }' |
    xargs -r ps -L --no-headers -o pid,lwp,psr,comm -p

PS:这个库的核心用户是什么 要求听起来还是有点不寻常。如果您从更广泛的角度提及您试图解决的问题,可能会更有用。

thkala 几乎是正确的。问题是答案是一半,因为它没有给出核心。

我会运行:

$ lsof | grep /usr/lib64/libcrypto.so |awk '{print }' | xargs ps -o pid,psr,comm -p