linux - bash 中类似 pgrep 的高级进程搜索

标签 linux bash

我需要在linux上的bash中找到某个java进程的pid。

如果只有一个java进程,

PID=$(pgrep java)

有效。

对于多个 java 进程,它变得更加复杂。我手动运行 pstree,首先找到我需要的 java 进程的祖先,然后找到有问题的 java 进程。可以在 bash 中执行此操作吗?基本上我需要伪代码中的功能:

Having `processname1` and `processname2`
and knowing that `processname2` is in the subtree of 'processname1',
find the pid of `processname2`.

在此示例中,java 进程将为 processname2

最佳答案

重新表述您的伪代码问题:找到所有以 processname1 进程为父进程的 processname2 进程。这可以使用以下嵌套的 pgrep 调用直接表示:

pgrep -P $(pgrep -d, processname1) processname2

这是直接来自 pgrep(1) 联机帮助页的关于这些标志的文档:

  -d delimiter
         Sets the string used to delimit each process ID in the output
         (by default a newline).

  -P ppid,...
         Only match processes whose parent process ID is listed.

请注意,这仅在 processname2processname1 的直接子进程时才有效。

关于linux - bash 中类似 pgrep 的高级进程搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3420154/

相关文章:

bash - 在 bash 中将 **heredoc** 添加到文件中

bash - 如何使用 UNIX 获取列表中唯一值的频率计数?

linux - 使用powershell区分linux和windows机器

linux - 从用户终端而不是 root 运行 Eclipse 时出错

python - 为什么我不能安装 greenlet(只是一个基本的 python 包)?

macos - 如何根据文件扩展名类型在终端中为 `open` 命令设置默认应用程序?

c++ - 在 Linux 上使用 C++ 访问 Sony Playstation SixAxis Controller

python - ALSA & Python - 捕获多个单声道音频输入

python - 为什么 Visual Studio Code 无法识别我的 WSL bash python?

linux - Unix bash shell 脚本 - 在 'for' 循环中迭代数组