sábado, 29 de diciembre de 2007

Monitorización de procesos: pgrep, pkill y psg

Muchas veces os habréis encontrado con que queréis matar una aplicación que no responde y al hacer un ps veis que hay varios procesos que pertenecen a la misma aplicación, entonces no que más remedio que matar los procesos uno a uno. Bueno, eso era así antes de conocer pgrep y pkill. pgrep es una herramienta que dado un nombre de proceso muestra por pantalla los pid's de todos los procesos con ese nombre y pkill es su complemento que en lugar de mostrar los procesos los mata directamente.

Ejecutaremos unas cuantas veces yes redirigiendo su salida a /dev/null y poniendo el proceso en background para tener algo con lo que trabajar:

jgr@seiya ~ $ yes &> /dev/null & yes &> /dev/null & yes &> /dev/null &
[1] 3670
[2] 3671
[3] 3672


Si hacemos ahora un ps de los de toda la vida veremos esto (la última línea es el propio grep):

jgr@seiya ~ $ ps aux | grep yes
jgr 3670 42.8 0.0 4164 584 pts/2 R 20:12 0:19 yes
jgr 3671 41.4 0.0 4164 584 pts/2 R 20:12 0:19 yes
jgr 3672 42.8 0.0 4164 584 pts/2 R 20:12 0:19 yes
jgr 4244 0.0 0.0 6368 808 pts/2 S+ 20:13 0:00 grep --colour=auto yes


Ahora con pgrep veremos sólo los pid's de los procesos:

jgr@seiya ~ $ pgrep yes
3670
3671
3672


Y con pkill los matamos y con pgrep comprobaremos que estén realmente muertos:

jgr@seiya ~ $ pgrep yes
[1] Terminado yes >&/dev/null
[2]- Terminado yes >&/dev/null
[3]+ Terminado yes >&/dev/null


pgrep y pkill tienen algunas opciones interesantes como por ejemplo -l para mostrar el nombre de los procesos (sólo pgrep) o -u/-U para mostrar o matar sólo los procesos del usuario especificado y alguna más que podéis ver en el man de pgrep.

Bueno y ya que estamos con ps os enseñaré un alias que suelo usar en el .bashrc para hacer más cómodo el uso de ps:

export GREP_COLOR="1;32" #verde claro
alias grep='grep --colour=auto'
alias psg="ps aux | grep -v grep | grep"


Básicamente lo que hacen estos alias es colorear las concordancias del grep y eliminar la última línea de la salida del ps que corresponde al propio grep. Aquí podéis ver un ejemplo otra vez con el proceso yes del ejemplo anterior:

No hay comentarios: