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?

nano /usr/bin/ffmpegk. . . .ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1. . . .chmod a+rx /usr/bin/ffmpegkkill -9si no coincide ningún procesogrep, deberías usarawkpara hacer coincidir el nombre:ps -A | awk "\$4 == \"$1\" { print \$1; }"killallpuedo hacer eso.fuente
killall --regexp "appl.*me"Aunque puede haber diferentes implementaciones de killall. Verman killall.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.fuente
Mi enfoque es similar al de @
Łukasz D. Tulikowski. En lugar de usargrep <application_name>; He usadogrep "[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 depssalida.Devolverá la lista de PID
Después de agregar
kill -9 $1, tiene un comando que mata todos los PIDfuente
greplugar de usarawkpara hacer la prueba más correctamente?grepcoincidirá con nombres que incluyen el destino como subcadena, por ejemplo.