Los procesos juegan un papel muy importante en las distribuciones Linux, ya que son
los que consumirán estos recursos hardware tan preciados en entornos de
producción, administrarlos y gestionarlos correctamente es de vital importancia ya
que estos procesos y la gestión que hace el sistema sobre ellos, hacen posible
mantener funcionando el servidor sin necesidad de reiniciar después de un cambio o
actualización importante. Esto es uno de los puntos más importantes por los
que Linux gobierna el 90% de los servidores alrededor del mundo .
Para esta labor contamos con varias herramientas a nuestra disposición, veamos
algunas de ellas.
Para ver los procesos en sistemas Linux, contamos con el comando ‘ ps ’, que listará (de
múltiples formas según las opciones que le pasemos) todos los procesos que se
encuentran corriendo en nuestro equipo.
ps [opciones]
Como de costumbre, podemos revisar el manual de ps dentro del sistema para
conocer todas las opciones posibles:
man ps
Siendo las más habituales :
ps aux (muestra todos los procesos del sistema)
ps axjf (que mostrará un árbol jerárquico con la ruta del programa al que pertenece el
proceso)
Las opciones que podemos aplicar a ps no van más allá de mostrar la información de
una u otra forma, más o menos extensa, o como ya sabemos, filtrar los resultados con
grep. Sea cual sea el método de muestra que elijamos, siempre habrá dos constantes,
el PID y el comando o nombre del programa. Aquí un ejemplo de filtrado sobre ps para
obtener únicamente los procesos pertenecientes a bash.
ps aux | grep bash
El PID es el número identificador de proceso que le asigna el sistema a cada proceso
que se inicia, mientras que el command es el programa al cual pertenece dicho
proceso.
Top es otro gestor de procesos integrado en la mayoría de sistemas Linux. Mientras
que ps nos muestra un listado de procesos estático, es decir, nos informa de los
procesos, nombres, usuarios o recursos que se están usando en el momento de la
petición; top nos da un informe en tiempo real de los mismos.
top
man top
Aquí, como vemos en su manual, podemos controlar más aspectos, como los de los
siguientes ejemplos entre otros:
top –d 5 (Donde 5 es el número de segundos a transcurrir entre cada muestreo)
top –o %CPU (Donde %CPU es el valor por el que vamos a ordenar los procesos )
top –u toushiro (Donde Toushiro es el usuario del cual queremos mostrar los procesos)
Otro gestor de procesos muy interesante y usado es ‘ htop ’, que nos mostrará sin salir
de la terminal (si es que lo ejecutamos desde ésta…) algo similar a top, pero donde
mediante las teclas de función del teclado, accederemos a menús de configuración al
estilo de las aplicaciones DOS (qué tiempos…).
htop
man htop
En htop, al tratarse de una aplicación en sí donde ya podremos configurar algunos de
sus aspectos y criterios de orden, hay poco que configurar, no obstante, tal y como
podemos leer en su manual, podemos hacer que inicie en modo monocromo,
predefinir el delay o intervalo de refresco, etc…
Los sistemas Linux vienen con la herramienta KILL instalada, que usaremos para
detener los procesos que necesitemos. Por defecto el comando kill envía una señal
denominada TERM a un proceso que le pasaremos mediante su PID como argumento.
Esta señal TERM pedirá a dicho proceso que termine, permitiéndole gestionar su
función de cierre, completando las tareas necesarias y limpiando la información que ha
cargado en memoria.
kill [PID del proceso]
En la captura de aquí arriba vemos cómo nos ha dado un error que aprovecho para
recalcar un punto muy importante en la seguridad de los sistemas Linux, sistemas
verdaderamente multiusuario y bien definidos, donde como vemos, no permite
eliminar o cancelar procesos de otros usuarios. Esto, como toda medida de seguridad
tiene su pega... pero vamos a quedarnos con lo "bueno" ^_^
En el caso de encontrarnos ante un proceso que “no quiere cerrarse” por la vía
diplomática que le ofrecemos con TERM, pasaremos a eliminar dicho proceso por la
fuerza ejecutando el comando kill con el siguiente argumento, pasando a root
previamente para no recibir el error que acabamos de comentar:
kill –KILL [PID del proceso]
Con este último comando, no estamos mandado al proceso ninguna señal,
directamente estamos diciéndole al kernel del sistema que descarte y cierre dicho
proceso.
Estas señales también pueden ser identificadas con números. Por ejemplo, en los
ejemplos anteriores TERM puede ser pasada al proceso mediante “-15” y –KILL es el
equivalente a pasar “-9”. Es decir, el resultado de los siguientes comandos será el
mismo:
kill -9 [PID del proceso]
kill –KILL [PID del proceso]
El comando kill además de para finalizar procesos, también podemos usarlo para
reiniciar ciertos servicios. Uno de los que más necesita reiniciarse suele ser Apache,
sobre todo si aún estamos con la configuración base, para ir viendo que todo funciona
correctamente.
Al igual que Apache, multitud de servicios necesitan ser reiniciados, y la mayoría de
ellos responde al argumento ‘HUP’ (Hang up) de kill. Mediante el siguiente comando,
el servicio perteneciente a Apache, se reiniciará y volverá a cargar el fichero de
configuración, permitiéndonos ver si los cambios han surtido efecto y volviendo a dar
servicio a los usuarios.
kill –HUP [PID de Apache]
Como vimos anteriormente, HUP también tiene su respectiva nomenclatura en
numeración, siendo el equivalente al comando anterior, la siguiente línea:
kill -1 [PID de Apache]
Un dato importante es que además de por su PID, si conocemos el nombre exacto del
proceso también podemos usarlo en el lugar en el que usaríamos el PID. Para esto
usaremos ‘ pkill ’ en lugar de kill, que funciona exactamente igual, pero preparado para
trabajar con nombres de proceso en lugar de con PID. Es decir estos dos comandos
harán exactamente lo mismo:
kill -9 3484
pkill -9 htop
' killall ' es una variante del comando kill con el que enviaremos la misma señal a todos
los procesos pertenecientes a un programa. Por ejemplo:
killall Firefox
Con estos comandos y herramientas ya podremos gestionar de forma correcta y
eficiente los procesos de nuestro sistema, monitorizándolos para ver si hay algo que
no debiese estar, o que se encuentre consumiendo recursos por encima de lo normal;
optimizando así nuestra distribución y el aprovechamiento que hacemos de nuestro
hardware.