При использовании grep так:

ps aux | grep 'processname' | awk '{print $2}'

PIDs процессов с processname процесса возвращается. При использовании этого:

ps aux | grep '^processname' | awk '{print $2}'

Я пытаюсь получить процессы, processname которых начинается с имени процесса , но это не работает.

Примеры запущенных процессов:

processname
other_processname

Я хотел бы получить PID первой опции, потому что имя processname является началом команды.

Я также попытался использовать флаги -E, -e, -w , и все они возвращают один и тот же результат. Что не так?

1 ответ1

4

^ отмечает начало строки, а не поля.

ps aux | grep ' processname'

подойдет ближе, но это все равно может дать некоторые ложные срабатывания.

Поскольку ширина других столбцов фиксирована, вы также можете использовать

grep '^.\{65\}processname'

Здесь ^.\{65\} - ровно 65 символов от начала строки. Точное число может отличаться в вашей системе.

Поскольку вы уже используете awk, возможно, это будет лучшим вариантом:

ps aux | awk '{ if ($11 == "processname") print $2 }'

Вы также можете переформатировать вывод ps, чтобы упростить процесс поиска:

ps ax -o pid,args | grep '^[^ ]\+ processname'

Ключ -o pid,args заставляет ps отображать только PID и команду с аргументами. Выражение ^[^ ]\+ соответствует всем символам от начала строки до первого пробела.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .