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 $1
pero 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/ffmpegk
kill -9
si no coincide ningún procesogrep
, deberías usarawk
para hacer coincidir el nombre:ps -A | awk "\$4 == \"$1\" { print \$1; }"
killall
puedo hacer eso.fuente
killall --regexp "appl.*me"
Aunque puede haber diferentes implementaciones de killall. Verman killall
.kill -9 pid
logro , 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
grep
coincidencia de patrones de clase de caracteres. (Referencia) .Puede usar
awk
para obtener primero una columna deps
salida.Devolverá la lista de PID
Después de agregar
kill -9 $1
, tiene un comando que mata todos los PIDfuente
grep
lugar de usarawk
para hacer la prueba más correctamente?grep
coincidirá con nombres que incluyen el destino como subcadena, por ejemplo.