| Artículos | 01 OCT 2003

Gestión de procesos

Tags: Histórico
Alvaro Ortiz.
Cada aplicación que arrancamos lanza por debajo uno o varios procesos imprescindibles para su normal funcionamiento. En realidad, estos procesos son la aplicación en sí. Controlar y depurar el buen funcionamiento de un sistema pasa por monitorizar la ejecución de estos procesos, el uso de memoria y cpu que hacen, si siguen en marcha o han finalizado por algún error, etc.

El comando PS
El comando mediante el que obtendremos la más completa información sobre los procesos que se encuentran en ejecución en nuestro sistema es ps. Cuando lo ejecutamos en un terminal y con los parámetros adecuados, nos puede ser de gran utilidad en muchas ocasiones.
Cuántas veces nos habrá sucedido que el escritorio se nos ha quedado bloqueado, o simplemente una aplicación no nos responde aunque aparentemente esté ejecutándose. Pues bien, en estos casos, con una cuidadosa observación de los procesos arrancados, su estado, consumo de recursos del sistema y tiempo de actividad, podremos salir del atolladero. En realidad muchas veces no es necesario realizar un minucioso estudio de todos estos parámetros ya que, si estamos localmente en un equipo monopuesto, lo más seguro es que nos hayamos percatado antes de cuál ha sido la aplicación que está dando problemas.
Esto no será siempre tan sencillo y, desde luego, en un sistema con múltiples usuarios conectados el uso de ps resulta del todo imprescindible. No queremos, ni podemos, hacer aquí una explicación detallada de los procesos en UNIX, pero desde luego sí dar unas claves para gestionar mejor nuestro sistema.
Veamos una salida estándar de ps:

PID TTY STAT TIME COMMAND
1142 ? SW 0:34 [nfsd]
1143 ? SW 0:34 [nfsd]
1144 ? SW 0:34 [nfsd]
1145 ? SW 0:00 [lockd]
1146 ? SW 0:00 [rpciod]
1202 ? S 0:14 /usr/bin/postmaster -D /mnt/datos/postgres
1225 tty2 S 0:00 /sbin/mingetty tty2
1226 tty3 S 0:00 /sbin/mingetty tty3
1227 tty4 S 0:00 /sbin/mingetty tty4
1228 tty5 S 0:00 /sbin/mingetty tty5
1229 tty6 S 0:00 /sbin/mingetty tty6
1230 ? S 0:01 /usr/bin/kdm -nodaemon
14268 ? S 0:07 /usr/java/j2sdk1.4.1_02/bin/java -Djava.endorsed.dirs

La cabecera de esta salida nos indica los campos de identificador de proceso (PID), terminal desde que se lanzó (TTY), estado (STAT), tiempo de actividad (TIME) y comando o demonio lanzador (command). También hay otros campos importantes, como por ejemplo el de usuario propietario, pero que veremos mejor al explicar la utilidad top.
Podríamos decir que el campo principal es PID, ya que es el parámetro por el que referenciar unívocamente un proceso para acometer la acción que sea sobre él. La invocación de ps más común, por la completa información que proporciona, podría ser ps –aux, ya que nos muestra todos los procesos del sistema, incluyendo los que no están controlados por terminal (como los demonios), el usuario propietario de cada proceso y el uso de memoria y CPU que hacen. Por supuesto ps tiene más opciones (puede verlas todas ejecutando man ps) pero desde luego esta combinación es la más útil. Además, luego veremos que top complementa el manejo de este comando más cómodamente.
Debido a la enorme cantidad de procesos que nos pueden llegar a salir en un listado, si lo que queremos es localizar uno en concreto por su terminal, propietario, nombre o cualquier otra característica, lo mejor será ejecutar la típica combinación ps –aux | grep –i lo_que_sea para buscar el patrón que determina exactamente lo que queremos. Una vez localizado, si lo que andábamos buscando es culpable de algún cuelgue, es un proceso zombie o simplemente un abusón de los recursos del sistema, es muy probable queramos recurrir a kill.

El comando kill
Kill en inglés significa matar, por lo que deja con su nombre bien clara su función: matar procesos. También con varias posibles opciones, éste será nuestro talismán en esos momentos en los que todo nuestro sistema parezca colgado. Olvidémonos de resetear el ordenador, utilicemos primero ps para después acabar con el culpable del colapso. Las principales opciones de kill son las señales que éste pasa al proceso a terminar. Podemos acabar fulminantemente un proceso por las bravas (señal SIGKILL) o avisarle de que haga sus últimas operaciones y se termine él mismo (señal SIGTERM). La sintaxis de ejecución es kill-s señal PID_del_proceso.
Estas señales (ver man kill para éstas y otras opciones) tienen una equivalencia numérica para poder invocarlas más cómodamente. Así, por ejemplo, kill –s SIGKILL pid sería equivalente a kill –9 pid.

La utilidad top
El comando ps es estático. Esto es, una vez ejecutado nos muestra su salida indiferente a posteriores cambios en el sistema. Sin embargo top aporta, además de una conveniente interfaz de usuario, un continuo refresco del estado de las cosas y, por supuesto, la posibilidad de invocar otros comandos (como kill o renice) de gestión de procesos.
Por ejemplo, para ordenar procesos por uso de CPU o memoria, basta respectivamente con pulsar P o M (mayúsculas). Para matar un proceso pulsaremos k minúscula y a continuación se nos pedirá el PID del proceso a matar y la señal con que matarlo. Para ver el resto de las opciones de manejo de top pulsaremos h. Y para salir de top, pulsamos q.
Con los tres comandos vistos, podemos realizar una buena gestión de administrador que vela por la estabilidad de ejecución de nuestro sistema.

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información