¿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?

Łukasz D. Tulikowski
fuente

Respuestas:

25
pkill -f <application_na>

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

hombre pkill

Katu
fuente
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
Łukasz D. Tulikowski
fuente
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
rudimeier
fuente
¿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
Praveen Kumar BS
fuente
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
alper
fuente
¿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