2010-09-24 2 views
4

Я пытаюсь выполнить идентификатор процесса regex на основе частей имени процесса. Это похоже на работу, если я делаю только одно слово, но терпит неудачу, когда я пытаюсь сделать что-то вроде: найти меня любой процесс с пути/начало **/endswiththis/Bash script имя процесса regex

Вот что я до сих пор:

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

Любые мысли? Спасибо, Стив

ответ

5

Многие Unixes теперь 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 [email protected]:00:00 for /var/spool/clientmqueue 

$pgrep sendmail 
6800 
6809 

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

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

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

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

man pgrep 
+0

Любые мысли о регулярных выражениях, чтобы получить что-нибудь, что соответствует началу пути и в конце концов?/matchthis/ignore/ignore/andendwiththis/ – Steve

+1

@Steve: 'grep '/ matchthis /.*/ andendwiththis /'' или 'grep -E '/ matchthis (/.*/ | /) andendwiththis /'' –

+0

@Dennis, что работал. Я использую переменные для согласованных терминов, и, похоже, это не работает. Любые синтаксические вещи, которые нужно изменить? – Steve

Смежные вопросы