Obtendo pids da palavra-chave ps -ef | grep

111

Eu quero usar ps -ef | grep "keyword"para determinar o pid de um processo daemon (há uma string exclusiva na saída de ps -ef nele).

Posso matar o processo com pkill keywordexiste algum comando que retorne o pid em vez de matá-lo? (pidof ou pgrep não funciona)

Dennis Ich
fonte

Respostas:

231

Você pode usar pgrepcontanto que inclua as -fopções. Isso torna as pgreppalavras-chave correspondentes em todo o comando (incluindo argumentos) em vez de apenas no nome do processo.

pgrep -f keyword

Na página de manual :

-f       O padrão normalmente é comparado apenas com o nome do processo. Quando -festá definido, a linha de comando completa é usada.


Se você realmente deseja evitar o pgrep, tente:

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

Observe o []contorno da primeira letra da palavra-chave. Esse é um truque útil para evitar a correspondência do awkpróprio comando.

Shawn Chin
fonte
3
ps é usado demais, e pgrep tão subutilizado. Obrigado pela postagem.
Felipe Alvarez
6
Uma maneira de passar a saída para matar é: kill -9 `pgrep -f keyword`
Kris
Esta resposta é a melhor de todas. Tanto tempo que perdips aux | grep chrome
Brandon
Tive que usar o [k]truque pgrep -f. Meu script estava rodando em um subshell, então eu acho que estava pegando seu comando pai (difícil saber com certeza - o pid que ele retornou sumiu quando o comando terminou de ser executado!)
ArtOfWarfare
2
@Kris para este caso de uso não seria mais simples de usar pkill -9 -f keyword?
oidualc
53

Experimentar

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

Esse comando deve fornecer o PID dos processos com KEYWORD neles. Neste caso, awkestá retornando o que está na 2ª coluna da saída.

Lewis Norton
fonte
2
Como isso pode retornar mais de um pid, você pode obter o primeiro anexando | head -1.
Kris
'head -1' retornará grep PID em alguns linux, deve ser tail -1.
João Vitorino
22

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

Vinayak
fonte
4
Talvez um erro de digitação? ps -ef | grep KEYWORD | grep -v grep | awk '{print $ 2}'
rmv
Você sabe como passar o PID retornado para "kill -9"?!
alybadawy de
3
@alybadawy apenas adicione | xargs kill -9ao final
patte
8

eu uso

ps -C "keyword" -o pid=

Este comando deve fornecer um número PID.

Arksonic
fonte
7

Isso está disponível no Linux: palavra-chave pidof

dbrank0
fonte
3

Para matar um processo por uma palavra-chave específica, você pode criar um apelido em ~/.bashrc(linux) ou ~/.bash_profile(mac).

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"
Swayamraina
fonte
Perfeito! Adicionar um tubo no final de | head -1tudo isso envolve tudo de forma agradável e organizada.
Russ