Administración Básica

Procesos

Un procesos es una instancia de un programa en ejecución. Haciendo análisis bioinformáticos muchas veces ejecutaremos programas que duren un tiempo considerable. Es interesante que durante el tiempo que dure el proceso conozcamos cual es su estado.

Linux, como ya hemos visto, es un sistema operativo multitarea y multiusuario. Esto quiere decir que múltiples procesos pueden operar simultáneamente sin interferir unos con otros.

Programas y procesos son entidades distintas. En un sistema operativo multitarea, múltiples instancias de un programa pueden ejecutarse simultáneamente. Cada instancia es un proceso separado. Por ejemplo, si cinco usuarios desde equipos diferentes, ejecutan el mismo programa al mismo tiempo, habría cinco instancias del mismo programa, es decir, cinco procesos distintos.

Cada proceso que se inicia es identificado con un número de identificación único conocido como Process ID (PID), que es siempre un número natural. Prácticamente todo lo que se está ejecutando en el sistema en cualquier momento es un proceso, incluyendo la shell, el ambiente gráfico, que puede tener múltiples procesos, etc.

Los entornos UNIX tienen una serie de herramientas para poder conocer el estado de los procesos y del sistema en general.

ps

El comando ps (process status) nos informa sobre el estado de los procesos. Dependiendo de los parámetros que le demos nos mostrara un tipo de información u otra. Por ejemplo con la opción -ef podremos ver todos los procesos que actualmente están en ejecución en el sistema:

ps -ef

En este caso la segunda columna nos indicará el PID o identificador único del proceso.

kill

El comando kill a pesar de su nombre no sólo sirve para matar o terminar procesos sino también para enviar señales a los procesos. La señal por defecto (cuando no se indica ninguna es terminar o matar el proceso), y la sintaxis es kill PID, siendo PID el número de ID del proceso. Pero hay otras señales que podemos enviar. Así, por ejemplo, es posible enviar una señal de STOP al proceso y se detendrá su ejecución, después cuando se quiera reanudar su ejecución podemos enviar la señal CONTinuar y el proceso continuara desde donde se quedo detenido. Con kill -l podemos acceder a una lista de todas las señales que podemos mandar a un proceso:

$ kill -l

El modo más convencional de matar un proceso es intentar primero que muera ordenadamente con un -15 y sino lo conseguimos matarlo con un -9:

$ kill -15 4719
$ kill -9 4719

top

Una herramienta muy usada y muy útil para el monitoreo en tiempo real del estado de los procesos y de otras variantes del sistema es el programa llamado top, se ejecuta desde la línea de comandos, es interactivo y por defecto se actualiza cada 3 segundos.

Estando dentro de la aplicación, presionando ‘h’ se accede a una ayuda de los posibles comandos que permiten configurar top, por ejemplo, al presionar ‘s’ pregunta por el tiempo en segundos de actualización, etc.

Una alternativa más moderna al comando top, que normalmente no es instalada por defecto, es htop.

df y free

df y free son dos herramientas muy útiles a la hora de conocer el estado de nuestro sistema. df nos indica cuanto espacio disponemos en cada dispositivo de almacenamiento y free nos muestra información sobre el uso y disponibilidad de la memoria. En el caso de df para poder leer cómodamente el informe es aconsejable usar la opción -h, ya que así generará la información en una forma más fácil de leer para los seres humanos. En el caso de free disponemos de la opción -m, que nos mostrará la informacion en MB:

free -h
df -h

Ejercicios

  1. Averigua todos los procesos que hay en ejecución.

  2. Cuantos procesos tiene tu usuario en ejecución?

  3. Ejecuta el comando “less” y averigua el pid del proceso

  4. Termina (mata) el proceso “less”

Soluciones

  1. ps -ef nombre_de_usuario| wc

  2. ps -u nombre_de_usuario| wc

  3. ps -ef | grep less

  4. kill PID_de_less

Utilidades avanzadas

Si vamos a trabajar con procesos largos es muy recomendable aprender a utilizar el comando screen. screen nos permite manejar distintos shells interactivos a la vez y mantenerlos abiertos entre diferentes conexiones o sesiones de trabajo. Resulta muy cómodo para mantener procesos largos en servidores remotos sin tener que tener una conexión establecida continuamente.