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)

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í.


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.


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


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.



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

¡Perfecto! Agregar una tubería al final de | head -1envuelve todo esto de manera agradable y ordenada.
Russ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.