Сценарий Bash имя процесса регулярное выражение - PullRequest
4 голосов
/ 24 сентября 2010

Я пытаюсь переопределить идентификаторы процессов на основе частей имени процесса.Кажется, это работает, если я только одно слово, но не удается, когда я пытаюсь сделать что-то вроде: найти мне любой процесс с путем / начало ** / заканчивается с этим /

Вот чтоУ меня так далеко:

QUEUE_PID="$(ps -ef | grep endswiththis | grep -v $0 | grep -v grep | awk '{ print $2 }')";   

Есть мысли?Спасибо, Стив

1 Ответ

5 голосов
/ 24 сентября 2010

Многие UNIXы теперь имеют pgrep, что делает именно то, что вы хотите

DESCRIPTION
   pgrep  looks  through the currently running processes and lists the process IDs which
   matches the selection criteria to stdout.  All the criteria have to match.

Как пример:

$ps -ef | grep sendmail
simonp    6004 27310  0 09:16 pts/5    00:00:00 grep sendmail
root      6800     1  0 Jul19 ?        00:00:03 sendmail: accepting connections
smmsp     6809     1  0 Jul19 ?        00:00:01 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

$pgrep sendmail
6800
6809

Параметр, переданный в pgrep, является регулярным выражением - он сопоставляется либо с именем исполняемого файла, либо с полной строкой аргумента процесса, зависящей от параметров (-f).

$pgrep  '^sen.*il$'
6800
6809

$pgrep -f '^sendmail.*connections$'
6800

Для получения дополнительной информации

man pgrep
...