8. Gestión de Procesos en Bash
Introducción a los Procesos
- Descripción: Un proceso es una instancia de un programa en ejecución. Linux es un sistema multitarea, lo que significa que puede ejecutar múltiples procesos simultáneamente.
- Conceptos clave:
- PID (Process ID): Identificador único de cada proceso.
- PPID (Parent Process ID): Identificador del proceso padre.
- Estados de los procesos: Los procesos pueden estar en diferentes estados. Los estados comunes incluyen:
- R (Running): El proceso se está ejecutando o está listo para ejecutarse.
- S (Sleeping): El proceso está inactivo, esperando a que un evento ocurra.
- D (Uninterruptible Sleep): El proceso está esperando a que se complete una operación de E/S (Entrada/Salida).
- T (Stopped): El proceso ha sido detenido, usualmente mediante la señal SIGSTOP o porque está siendo depurado.
- Z (Zombie): El proceso ha terminado, pero su información aún no ha sido recolectada por el proceso padre.
- X (Dead): El proceso ha terminado y ha sido eliminado del sistema (rara vez se ve).
Comandos Básicos para Gestión de Procesos
-
ps
- Mostrar información sobre los procesos en ejecución:ps
: Muestra los procesos en la terminal actual.ps -e
: Muestra todos los procesos del sistema.ps -f
: Muestra una salida completa con más detalles.- Ejemplo:
ps -e
-
top
- Monitorizar procesos en tiempo real:top
: Muestra una lista dinámica de los procesos que están usando más CPU.- Comandos dentro de
top
:h
: Ayuda.k
: Matar un proceso.q
: Salir detop
.
- Ejemplo:
top
-
htop
- Monitorización de procesos (versión mejorada detop
):htop
: Proporciona una interfaz más amigable y visual para la monitorización de procesos.- Ejemplo:
htop
-
kill
- Enviar señales a los procesos:kill [PID]
: Enviar la señalSIGTERM
para terminar un proceso.kill -9 [PID]
: Enviar la señalSIGKILL
para forzar la terminación de un proceso.- Ejemplo:
kill 1234
kill -9 1234
-
pkill
ypgrep
- Trabajar con procesos por nombre:pgrep [nombre]
: Devuelve los PIDs de los procesos que coinciden con el nombre.pkill [nombre]
: Envía señales a los procesos que coinciden con el nombre.- Ejemplo:
pgrep bash
pkill bash
Prioridad de Procesos
- Descripción: Cada proceso tiene una prioridad que determina cuánto tiempo de CPU recibe. La prioridad puede ser ajustada.
- Comandos:
-
nice
- Iniciar un proceso con una prioridad específica:nice -n [valor] [comando]
: Inicia un proceso con el valor denice
especificado (valor por defecto es 0, rango: -20 a 19, donde -20 es la mayor prioridad y 19 la menor).- Ejemplo:
nice -n 10 sleep 100
-
renice
- Cambiar la prioridad de un proceso en ejecución:renice [valor] -p [PID]
: Cambia la prioridad de un proceso en ejecución.- Ejemplo:
renice -n 5 -p 1234
-
Ejecución de Procesos en Segundo Plano
- Descripción: Es posible ejecutar procesos en segundo plano, permitiendo al usuario seguir usando la terminal.
- Comandos:
-
&
- Ejecutar un proceso en segundo plano:comando &
: Ejecuta el comando en segundo plano.- Ejemplo:
sleep 100 &
-
bg
yfg
- Gestionar procesos en segundo plano:bg [job]
: Reanuda un trabajo en segundo plano.fg [job]
: Trae un trabajo al primer plano.- Ejemplo:
sleep 100 &
fg %1
-
jobs
- Listar trabajos en segundo plano:jobs
: Muestra una lista de trabajos en segundo plano.- Ejemplo:
jobs
-
Ejercicios de Gestión de Procesos
Ejercicio 1: Comandos Básicos para Gestión de Procesos
1.1 Usa ps
para listar todos los procesos del sistema.
1.2 Usa top
para monitorizar los procesos en tiempo real. ¿Cuál es el proceso que más CPU está usando?
1.3 Usa htop
para monitorizar los procesos en tiempo real. ¿Qué diferencias notas respecto a top
?
Ejercicio 2: Enviar Señales a Procesos
2.1 Usa kill
para terminar un proceso específico.
2.2 Usa pkill
para terminar todos los procesos que coinciden con un nombre específico.
Ejercicio 3: Prioridad de Procesos
3.1 Inicia un proceso con una prioridad específica usando nice
.
3.2 Cambia la prioridad de un proceso en ejecución usando renice
.
Ejercicio 4: Ejecución de Procesos en Segundo Plano
4.1 Ejecuta un comando en segundo plano usando &
.
4.2 Usa bg
para reanudar un proceso en segundo plano y fg
para traerlo al primer plano.
4.3 Usa jobs
para listar todos los trabajos en segundo plano.
Ejercicios con soluciones de Gestión de Procesos
Ejercicio 1: Comandos Básicos para Gestión de Procesos
1.1 Usa ps
para listar todos los procesos del sistema.
- Solución:
ps -e
1.2 Usa top
para monitorizar los procesos en tiempo real. ¿Cuál es el proceso que más CPU está usando?
- Solución:
En la parte superior de la interfaz de
top
top
, puedes ver el proceso que está usando más CPU en tiempo real. Está listado en la columna%CPU
.
1.3 Usa htop
para monitorizar los procesos en tiempo real. ¿Qué diferencias notas respecto a top?
- Solución:
htop proporciona una interfaz más amigable y visual, con colores que facilitan la lectura. Además, permite navegar por los procesos con las teclas de flecha y proporciona atajos de teclado más intuitivos.
htop
Ejercicio 2: Enviar Señales a Procesos
2.1 Usa kill
para terminar un proceso específico.
- Solución:
kill [PID]
2.2 Usa pkill
para terminar todos los procesos que coinciden con un nombre específico.
- Solución:
pkill [nombre_del_proceso]
Ejercicio 3: Prioridad de Procesos
3.1 Inicia un proceso con una prioridad específica usando nice
.
- Solución:
nice -n 10 sleep 100
3.2 Cambia la prioridad de un proceso en ejecución usando renice
.
- Solución:
renice -n 5 -p [PID]
Ejercicio 4: Ejecución de Procesos en Segundo Plano
4.1 Ejecuta un comando en segundo plano usando &
.
- Solución:
sleep 100 &
4.2 Usa bg
para reanudar un proceso en segundo plano y fg
para traerlo al primer plano.
- Solución:
# Primero, detener el proceso en primer plano (Ctrl + Z)
bg %1
fg %1
4.3 Usa jobs
para listar todos los trabajos en segundo plano.
- Solución:
jobs