Gestión de Procesos en Linux
En el ecosistema de Linux, un proceso es la ejecución de un programa específico que realiza una tarea particular. Cada proceso tiene su propio identificador único (PID) y está compuesto por un conjunto de recursos, como memoria y CPU, que le permiten funcionar de manera independiente.
En el universo de Linux, la gestión efectiva de procesos es una habilidad crucial para optimizar el rendimiento y asegurar la estabilidad del sistema. Este post te sumergirá en los fundamentos esenciales de la gestión de procesos
PS
Si no añadimos ningún parámetro, ps mostrará los procesos del usuario con el que estamos logueados. Por otra parte, los parámetros más básicos a conocer son los siguientes:
aux : Lista los procesos de todos los usuarios con información añadida (destacamos más abajo).
-a Lista los procesos de todos los usuarios.
-u Lista información del proceso como por ejemplo el usuario que lo está corriendo, la utilización de CPU y memoria, etc.
-x Lista procesos de todas las terminales y usuarios
-l Muestra información que incluye el UID y el valor «nice«.
–-forest Muestra el listado procesos en un formato tipo árbol que permite ver como los procesos interactúan entre si, podría ser algo similar al comando pstree.
PSTREE
El programa pstree facilita información sobre la finalización de una serie de procesos relacionados entre sí, esto es, todos los descendientes de un proceso particular. El programa deja claro desde un principio que proceso es el primario y cuales son los secundarios. Esto evita buscar las relaciones entre los diversos procesos de manera manual.
Parámetros comúnmente utilizados :
-H: Si nos interesa podemos ver el árbol de un proceso específico:
-g: Nos agrupara los procesos por grupos :
-n: Nos permite ordenar la salida por el numero de PID:
-p: Muestra el numero de PID
-s:Muestra los procesos padres
SYSTEMCTL STATUS
Este comando se utiliza para ver el estado en el que se encuentra un servicio , Específicamente, muestra información sobre si el servicio o unidad está activo o inactivo, y si está en ejecución o detenido. También muestra cualquier mensaje de error o advertencia relacionado con el servicio o unidad. Este comando es útil para verificar el estado de un servicio o unidad en el sistema y para resolver problemas relacionados con ellos.
TOP
Es un programa todo en uno: simultáneamente cumple las funciones de ps y kill. Es un comando de modo consola, por lo que debe iniciarlo desde una terminal .
Dentro de este podemos controlarlo usando las siguientes teclas:
-k: este comando se usa para enviar una señal a un proceso. Luego, top le preguntará por el PID del proceso, seguido del número de la señal a enviar (predeterminadamente TERM — o 15);
-M: este comando se usa para ordenar el listado de los procesos de acuerdo a la memoria que usan (campo %MEM);
-P: este comando se usa para
ordenar el listado de procesos de acuerdo al tiempo de CPU que consumen(campo %CPU; este es el método de ordenamiento predeterminado);
-u: este comando se usa para mostrar los procesos de un usuario en particular, top le preguntará de cual. Debe ingresar el nombre del usuario.
-i: este comando actúa como un interruptor; predeterminadamente se muestran todos los procesos, incluso los que están dormidos; este comando asegura que se muestran sólo los procesos que están en curso de ejecución :
HTOP
Htop es la version mejorada y actual de top la cual tiene una interfaz mas amigable y mas funcionalidades las cuales nos ayudaran a la supervisión de procesos . Este se divide en varias partes :
El encabezado divide la parte superior de la interfaz en secciones izquierda y derecha. Estos muestran el uso de la CPU/memoria, el espacio de intercambio, el tiempo de actividad de la máquina, las tareas y la carga promedio.
La sección superior izquierda muestra una línea para cada núcleo de CPU. Por ejemplo, la captura de pantalla anterior muestra dos núcleos de CPU, con el porcentaje que representa la carga en cada uno.
También puede ver el código de colores proporcionado por htop para identificar qué tipo de procesos utilizan la CPU:
- Rojo: porcentaje ocupado por procesos del sistema
- Azul: porcentaje ocupado por proceso de baja prioridad
- Verde: porcentaje ocupado por procesos de usuario
Las líneas de memoria también usan códigos de colores, esta vez para representar:
- Amarillo: porcentaje ocupado por caché contenido
- Verde: porcentaje ocupado por la memoria utilizada
- Azul: porcentaje ocupado por contenido buffer
El panel central muestra todos los procesos en ejecución con sus estadísticas asociadas según la utilización de la CPU. Muestra la siguiente información para cada proceso:
- ID de proceso (PID)
- El propietario (Usuario)
- Consumo de memoria virtual porcentaje de procesador memoria física
Para finalizar este programa también es interactivo , abajo tenemos un índice donde podemos comprobar las funciones que nos permite usar :
Además disponemos de varios atajos de teclados :
- u Ordenar procesos por nombre de usuario
- p Alternar con la ruta del programa
- F2 o S Entrar en Configuración
- F3 o / Proceso de búsqueda
- F5 o t Vista ordenada o de árbol
- F6 +/- Seleccione el proceso principal para expandir/contraer el árbol
- F7 o [ Aumentar la prioridad solo para root
- F8 o ] Prioridad baja (bueno +)
- F9 o k Matar proceso
- H Alterna con subprocesos de proceso de usuario
- K Alterna con subprocesos de proceso del kernel
&
El símbolo & es un operador de shell en Unix y Linux que permite ejecutar un proceso en segundo plano. Al colocar & al final de un comando, se ejecutará el proceso en segundo plano y se le asignará una tarea en segundo plano. Esto significa que el proceso se ejecutará en paralelo con otras tareas y no bloqueará la terminal o la línea de comandos hasta que finalice.
JOBS
Este comando listara los procesos que se encuentran en segundo pano así como su estado , nos permite saber su PID:
FG
Complementando al comando anterior , este nos permite reanudar en primer plano el último trabajo que fue suspendido.:
Listando con jobs podemos mandar un proceso en especifico a primer plano :
BG
Cuando un comando se está ejecutando puedes suspenderlo usando ctrl-Z. El comando se detendrá inmediatamente, y volverás al shell de la terminal.
Puedes reanudar la ejecución del comando en segundo plano, así que seguirá ejecutándose pero no te impedirá hacer otro trabajo en la terminal.
KILL
Los procesos de Linux pueden recibir señales y reaccionar a ellas. Esa es una forma en la que podemos interactuar con los programas en ejecución. El programa kill puede enviar una variedad de señales a un programa. No sólo se usa para terminar un programa, como el nombre lo sugiere, sino que es su principal trabajo Por defecto, este manda una señal TERM al identificador de proceso indicado.
Podemos listar las señales con kill -l :
Mandamos una señal con el parámetro -s seguida del numero de esta y el PID del proceso :
XKILL
Este es el método más sencillo y el más práctico. El cursor del mouse se transformará en una pequeña calavera. Todo lo que resta es hacer clic en la ventana que querés cerrar y voilá. Chau proceso.
KILLALL
Similar al comando kill, killall enviará la señal a múltiples procesos a la vez en lugar de enviar una señal a un identificador de proceso específico . Por ejemplo, puedes tener múltiples instancias del programa top en ejecución, y killall top terminará con todos ellos.
Puedes especificar la señal, como con kill :
Por ejemplo podemos matar todos los tops :
PIDOF
Te permite encontrar el ID del proceso de un programa en ejecución:
-s: Petición única - ordena al programa devolver un único identificador de proceso
PID BASH
echo t$$ → id bash
Es una forma rápida de encontrar el identificador actual de la bash :
NICE
Ejecuta un comando con una prioridad determinada, o modifica la prioridad a de un proceso (programa en ejecución). Utiliza una prioridad variable que parte de la prioridad del shell y suma o resta valores. Mientras menor es el valor de la prioridad mayor prioridad tiene el proceso.
El valor de la prioridad del proceso find aumenta en 5, disminuye su prioridad.
RENICE
Sirve para cambiar la prioridad de un proceso :
PKILL
Este comando nos permite matar un proceso del que conocemos su nombre completo o parte de él. Veamos un ejemplo: