Cómo dar argumentos para matar a través de una tubería


85

Necesito buscar un determinado proceso y matar ese proceso. Escribí un comando como este:

ps -e | grep dmn | awk '{print $1}' | kill

Donde está el nombre del proceso dmn. Pero no está funcionando. ¿Cómo puedo encontrar procesos por nombre y killellos?

Respuestas:


162
kill $(ps -e | grep dmn | awk '{print $1}')

8
Utilice la nueva $()sintaxis: kill $(ps -e | grep dmn | awk '{print $1}').
Stratus3D

7
Por otro lado, tuve que modificar esta respuesta para que funcionara: kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')no estoy seguro de por qué y no me importa lo suficiente.
Joshweir

1
@joshweir Es porque de lo contrario killtrató de matar incluso el proceso 'grep' que estaba tratando de buscar el patrón
decir,

¿No sería necesario \ndespués de cada awk, como en awk '{print $1"\n"}'?
Sopalajo de Arrierez

43

En caso de que haya varios procesos que desee eliminar, puede usar esto:

ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill

Nota: Debe eliminar el proceso grep en sí de la salida, por eso grep -v grepse usa.


17
Puede evitar que grep aparezca en su grep poniendo el primer carácter entre corchetes, como: grep [d] mn
Oldskool

1
@Oldskool Buen truco. Usar metacaracteres para hacer que la expresión regular grep no coincida es una buena idea.
jcollado

@Oldskool, +1, ¡eres un genio!
jcr

Buen truco, aunque hace que sea más complicado convertirlo en un script de shell
Metagrapher

17

Podrías usar

pkill dmn 

si su sistema tiene el comando pkill .


1
+1 para pkill en lugar de killall. Está disponible en múltiples plataformas sin un "significado" diferente ( killall en Solaris es equivalente a killall5 en Linux, por ejemplo, es decir, matar TODOS los procesos)
plundra

4

Solo agrego otros, pero me gusta usar la capacidad de características de expresiones regulares de awk:

kill $(ps | awk '/dmn/{print $1}')

4

Si tiene el pidofcomando en su sistema (sé que los shells como ZSH vienen con esto por defecto, a menos que me equivoque), podría hacer algo como.

kill -9 $(pidof dmn)


2

Es posible que no lo necesite pipe, si tiene el pidofcomando y conoce el nombre de la imagen, lo hice así:

kill $(pidof synergyc)

$()Entiendo esto ya que convierte esa salida en una variable que kill puede usar, esencialmente como lo haría pipe. Más corto y más fácil de entender que algunas otras opciones, pero también quizás menos flexible y más directo.


0
for procid in $(ps -aux | grep "some search" | awk '{print $2}'); do kill -9 $procid; done

hola amigos ... podemos hacerlo usando for loop.

"Algunas búsquedas" es aquí cualquier nombre de proceso que desee buscar, por ejemplo "java", así que digamos que el número de procesos java es 200+, por lo que matar uno por uno será demasiado típico.

para que pueda usar el comando anterior.

Gracias.


0

Úselo pgrepcon la opción -f. kill $(pgrep -f dmn)


4
Si es así pgrep, ¿por qué no simplemente pkill -f dmn?
muru
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.