Получение идентификаторов из ps -ef | ключевое слово grep

111

Я хочу использовать ps -ef | grep "keyword"для определения pid процесса демона (в нем есть уникальная строка в выводе ps -ef).

Я могу убить процесс, если pkill keywordесть какая-нибудь команда, которая возвращает pid вместо того, чтобы убивать его? (pidof или pgrep не работают)

Деннис Ич
источник

Ответы:

231

Вы можете использовать, pgrepпока включаете -fпараметры. Это позволяет использовать pgrepключевые слова во всей команде (включая аргументы), а не только в имени процесса.

pgrep -f keyword

На странице руководства :

-f       Шаблон обычно сопоставляется только с именем процесса. Когда -fустановлено, используется полная командная строка.


Если вы действительно хотите избежать использования pgrep, попробуйте:

ps -ef | awk '/[k]eyword/{print $2}'

Обратите внимание на []первую букву ключевого слова. Это полезный прием, позволяющий избежать совпадения с awkсамой командой.

Шон Чин
источник
3
ps используется слишком часто, а pgrep - недостаточно. Спасибо за сообщение.
Фелипе Альварес
6
Один из способов передать результат для kill: kill -9 `pgrep -f keyword`
Крис,
Это лучший ответ. Так много времени я истощеныps aux | grep chrome
Brandon
Пришлось использовать [k]уловку pgrep -f. Мой скрипт выполнялся в подоболочке, поэтому я думаю, что он собирал свою родительскую команду (трудно сказать наверняка - возвращенный им pid исчез, когда команда была завершена!)
ArtOfWarfare
2
@Kris для этого варианта использования не было бы проще просто использовать pkill -9 -f keyword?
oidualc
53

Пытаться

ps -ef | grep "KEYWORD" | awk '{print $2}'

Эта команда должна дать вам PID процессов с KEYWORD в них. В этом случае awkвозвращает то, что находится во 2-м столбце вывода.

Льюис Нортон
источник
2
Поскольку это может возвращать более одного pid, вы можете получить первый, добавив | head -1.
Крис
'head -1' вернет grep PID в некоторых Linux, должно быть хвостом -1.
Жоао Виторино,
22

ps -ef | grep KEYWORD | grep -v grep | awk '{print $2}'

Винаяк
источник
4
Возможно опечатка? ps -ef | grep KEYWORD | grep -v grep | awk '{print $ 2}'
rmv
Вы знаете, как передать возвращенный PID в «kill -9» ?!
alybadawy
3
@alybadawy просто добавь | xargs kill -9в конец
patte
8

я использую

ps -C "keyword" -o pid=

Эта команда должна дать вам номер PID.

Арксоник
источник
7

Это доступно в linux: ключевое слово pidof

dbrank0
источник
4

Чтобы убить процесс с помощью определенного ключевого слова, вы можете создать псевдоним в ~/.bashrc(linux) или ~/.bash_profile(mac).

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"
Swayamraina
источник
Отлично! Добавление трубы в конец | head -1обертки делает все это красиво и аккуратно.
Расс