Расширенный pgrep-подобный процесс поиска в bash - PullRequest
0 голосов
/ 06 августа 2010

Мне нужно найти pid определенного процесса Java в Bash на Linux.

Если есть только один процесс 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.

1 Ответ

2 голосов
/ 06 августа 2010

Переформулировка вопроса о псевдо-коде: найдите все процессы processname2, у которых processname1 процесс является родительским.Это может быть выражено напрямую с помощью следующего вложенного 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.

Обратите внимание, что это будет работать, только если processname2 является непосредственным дочерним процессом processname1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...