Obtener pids de ps -ef | palabra clave grep

111

Quiero usar ps -ef | grep "keyword"para determinar el pid de un proceso demonio (hay una cadena única en la salida de ps -ef).

Puedo matar el proceso con pkill keyword¿hay algún comando que devuelva el pid en lugar de matarlo? (pidof o pgrep no funciona)

Dennis Ich
fuente

Respuestas:

231

Usted puede utilizar pgrepsiempre y cuando incluya las -fopciones. Eso hace pgrepque las palabras clave coincidan en todo el comando (incluidos los argumentos) en lugar de solo el nombre del proceso.

pgrep -f keyword

Desde la página del manual :

-f       El patrón normalmente solo se compara con el nombre del proceso. Cuando -fse establece, se utiliza la línea de comando completa.


Si realmente desea evitar pgrep, intente:

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

Tenga en cuenta []alrededor de la primera letra de la palabra clave. Es un truco útil para evitar que coincida con el awkcomando en sí.

Shawn Chin
fuente
3
ps está sobreutilizado y pgrep tan infrautilizado. Gracias por la publicacion.
Felipe Alvarez
6
Una forma de pasar la salida para matar es: kill -9 `pgrep -f keyword`
Kris
Esta respuesta es la mejor de todas. Tanto tiempo que he perdidops aux | grep chrome
Brandon
Tuve que usar el [k]truco pgrep -f. Mi script se estaba ejecutando en una subshell, así que creo que estaba recogiendo su comando principal (es difícil saberlo con certeza: ¡el pid que devolvió desapareció cuando el comando terminó de ejecutarse!)
ArtOfWarfare
2
¿@Kris para este caso de uso no sería más sencillo de usar pkill -9 -f keyword?
oidualc
53

Tratar

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

Ese comando debería darle el PID de los procesos con KEYWORD en ellos. En este caso, awkdevuelve lo que está en la segunda columna de la salida.

Lewis Norton
fuente
2
Debido a que esto puede devolver más de un pid, puede obtener el primero agregando | head -1.
Kris
'head -1' devolverá grep PID en algunos linux, debería ser tail -1.
Joao Vitorino
22

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

Vinayak
fuente
4
¿Quizás un error tipográfico? ps -ef | grep PALABRA CLAVE | grep -v grep | awk '{print $ 2}'
rmv
¿Sabes cómo pasar el PID devuelto a "kill -9"?
alybadawy
3
@alybadawy solo agrega | xargs kill -9al final
patte
8

yo suelo

ps -C "keyword" -o pid=

Este comando debería darle un número PID.

Arksonic
fuente
7

Esto está disponible en linux: palabra clave pidof

dbrank0
fuente
3

Para matar un proceso mediante una palabra clave específica, puede crear un alias en ~/.bashrc(linux) o ~/.bash_profile(mac).

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"
swayamraina
fuente
¡Perfecto! Agregar una tubería al final de | head -1envuelve todo esto de manera agradable y ordenada.
Russ