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