【问题标题】:Is it possible to find which process is using OPENSSL in linux?是否可以在 linux 中找到使用 OPENSSL 的进程?
【发布时间】:2016-02-24 21:15:06
【问题描述】:

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

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

操作系统-Debian/Ubuntu

【问题讨论】:

  • lsof。将列出进程打开的所有文件,包括它们正在使用的 .so 库以及关联的 pid。
  • @MarcB 感谢您的快速回复。 lsof 给出了进程名称,它是 pid。如何找到该程序正在运行的处理器内核?
  • 该信息可能隐藏在 /proc 的某个 pid 中,但考虑到进程可以随机围绕核心弹跳,该信息可能不是特别有用。
  • @MarcB 确实该进程可能会从一个处理器反弹到另一个处理器。但是,如果我使用“watch -n 1” ;这将给出一些提示它是否正在移动?
  • @bholanath:多线程进程呢?您可以在每个内核上拥有 100 个单个进程的线程...(为什么您需要这些信息,真的吗?)

标签: linux security gcc debian performance-testing


【解决方案1】:

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

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

这基本上是:

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

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

是的,这可能确实需要提升权限,具体取决于您对 /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-c​​ore-are-the-users-of-this-library-on 要求听起来还是有点不寻常。如果您从更广泛的角度提及您试图解决的问题,这可能会更有用。

【讨论】:

  • 感谢您的及时回复。你解释得很漂亮。这将给出哪些进程正在使用特定的共享库。您能否补充一下,如何找到这些进程正在运行的处理器内核(如 dkaz 所述),以便我接受您的回答。
  • 我已经检查了上面的命令不需要任何root权限。但是,这需要一些时间才能找到正在使用共享库的进程。这可能是由于 lsof 列出了您提到的系统上所有打开的文件。
【解决方案2】:

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

我会运行它:

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

【讨论】:

  • 感谢您的及时回复。它也给了那个pid。
猜你喜欢
  • 2011-04-05
  • 2017-01-29
  • 2021-07-31
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多