shell - all - ¿Cómo matar todos los procesos que coinciden con un nombre?
kill-9 linux (11)
Digamos que quiero matar todos los procesos que contengan la palabra amarok. Puedo imprimir los comandos que quiero ejecutar. Pero, ¿cómo puedo hacer que el shell los ejecute? es decir.
ps aux | grep -ie amarok | awk ''{print "kill -9 " $2}''
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031
¿Quizás agregando los comandos al archivo ejecutable, configurando el permiso + x y luego ejecutando?
ps aux | grep -ie amarok | awk ''{print "kill -9 " $2}'' > pk;chmod +x pk;./pk;rm pk
Creo que este comando killall es exactamente lo que necesitas. El comando se describe como "procesos de eliminación por nombre". Es fácil de usar. Por ejemplo
killall chrome
Este comando eliminará todos los procesos de Chrome. Aquí hay un enlace sobre el comando killall.
http://linux.about.com/library/cmd/blcmdl1_killall.htm
Espero que este comando te pueda ayudar.
Del man 1 pkill
-f The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
Lo que significa, por ejemplo, si vemos estas líneas en ps aux
:
apache 24268 0.0 2.6 388152 27116 ? S Jun13 0:10 /usr/sbin/httpd
apache 24272 0.0 2.6 387944 27104 ? S Jun13 0:09 /usr/sbin/httpd
apache 24319 0.0 2.6 387884 27316 ? S Jun15 0:04 /usr/sbin/httpd
Podemos matarlos a todos usando la opción pkill -f
:
pkill -f httpd
Si desea ejecutar la salida de un comando, puede ponerlo dentro de $(...)
, sin embargo, para su tarea específica, eche un vistazo a los comandos killall
y pkill
.
Si está utilizando cygwin o un shell mínimo que carece de killall
, puede usar este script:
killall.sh - Mata por nombre de proceso.
#/bin/bash
ps -W | grep "$1" | awk ''{print $1}'' | xargs kill -f;
Uso:
$ killall <process name>
También puede evaluar su salida como un subproceso, rodeando todo con marcas de retroceso o colocándolo dentro de $ ():
`ps aux | grep -ie amarok | awk ''{print "kill -9 " $2}''`
$(ps aux | grep -ie amarok | awk ''{print "kill -9 " $2}'')
pkill -x coincide exactamente con el nombre del proceso.
pkill -x amarok
pkill -f es similar pero permite un patrón de expresión regular.
Tenga en cuenta que pkill sin otros parámetros (por ejemplo, -x, -f) permitirá coincidencias parciales en los nombres de proceso. Entonces "pkill amarok" mataría a amarok, amarokBanana, bananaamarok, etc.
Ojalá -x fuera el comportamiento por defecto!
prueba kill -s 9 ps -ef |grep "Nov 11" |grep -v grep | awk ''{print $2}''
ps -ef |grep "Nov 11" |grep -v grep | awk ''{print $2}''
Para eliminar procesos del 11 de noviembre o kill -s 9 ps -ef |grep amarok|grep -v grep | awk ''{print $2}''
ps -ef |grep amarok|grep -v grep | awk ''{print $2}''
Para matar procesos que contienen la palabra amarok
usa pgrep
kill -9 $(pgrep amarok)
La forma segura de hacer esto es:
pkill -f amarok
ps aux | grep -ie amarok | awk ''{print $2}'' | xargs kill -9
xargs (1): xargs - construye la (s) lista (s) de argumentos y ejecuta la utilidad. Útil cuando quieres encauzar argumentos a algo como kill
o ls
o así sucesivamente.