¿Cómo matar todo el proceso con el nombre de pila?


16

Ejecuto el comando ps -A | grep <application_name>y obtengo una lista de procesos como este:

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

Quiero matar a todos los procesos de la lista: 19440, 21630, 22694.

Lo he intentado ps -A | grep <application_name> | xargs kill -9 $1pero funciona con errores.

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

¿Cómo puedo hacer esto con gracia?

Respuestas:


25
pkill -f <application_na>

Eliminará todos los procesos que contienen el patrón <application_na>en sus nombres.

hombre pkill


9

El problema es que ps -A | grep <application_name> | xargs -n1devuelve resultados como este

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

Puede usar awkpara obtener primero una columna de pssalida .

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

Devolverá la lista de PID

19440
21630
22694

Y agregando kill -9 $1que tiene un comando que mata todos los PID

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

esto es perfecto prueba que en escritura del golpe que es mata al Procesadora inmediatamente sin errores + incluso si el proceso se inició is'nt que no muestra ningún error, que es lo que quiero, aquí ejemplo de asesino ffmpeg Procesadora, nano /usr/bin/ffmpegk . . . . ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1 . . . . chmod a+rx /usr/bin/ffmpegk
Salem F

Tengo un problema con esto donde obtengo la salida de kill -9si no coincide ningún proceso
Daniel F

1
En lugar de la grep, deberías usar awkpara hacer coincidir el nombre:ps -A | awk "\$4 == \"$1\" { print \$1; }"
Toby Speight

0

killall puedo hacer eso.

$ killall application_name

¿Está kill all permitiendo la expresión regular en el nombre de una aplicación?
Łukasz D. Tulikowski el

killall --regexp "appl.*me"Aunque puede haber diferentes implementaciones de killall. Ver man killall.
rudimeier

killall no es suficiente a veces necesito enviarlo tres veces para matar el proceso, e incluso no lo kill -9 pidlogro , la única solución de trabajo rápido para mí es que creo que @ ŁukaszD.Tulikowski es la mejor solución de trabajo especialmente para scripts de bash.
Salem F

-1
ps -eaf | grep -i applicationname| grep -iv 'grep'| awk '{print "kill -9" " "  $2}'|sh

Si bien aún no he votado sobre esta pregunta, no ha descrito por qué esto es diferente o mejor que las otras soluciones, que son muy similares a esto, o ha descrito por qué el OP tuvo problemas con su variación.
Jeff Schaller

-2

Mi enfoque es similar al de @ Łukasz D. Tulikowski. En lugar de usar grep <application_name>; He usado grep "[a]pplication_name", que no coincide con su propia línea de comando de proceso.

La expresión de corchetes es parte de la grepcoincidencia de patrones de clase de caracteres. (Referencia) .


Puede usar awkpara obtener primero una columna de pssalida.

ps -A | grep "[a]pplication_na" | awk '{print $2}' | xargs -n1

Devolverá la lista de PID

7644
407
406

Después de agregar kill -9 $1, tiene un comando que mata todos los PID

ps aux | grep "[a]pplication_na" | awk '{print $2}' | xargs kill -9 $1

¿Por qué en greplugar de usar awkpara hacer la prueba más correctamente? grepcoincidirá con nombres que incluyen el destino como subcadena, por ejemplo.
Toby Speight
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.