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)

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.


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.


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}'


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.


7

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


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}'`"

Perfeito! Adicionar um tubo no final de | head -1tudo isso envolve tudo de forma agradável e organizada.
Russ
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.