Получение идентификаторов из 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



4

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

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"

Отлично! Добавление трубы в конец | head -1обертки делает все это красиво и аккуратно.
Расс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.