-->

Introducción a la Gestión de Procesos en Linux

Objetivo:

Comprender la naturaleza de los procesos en Linux, su arquitectura jerárquica Padre-Hijo (forking), la interpretación de sus propiedades y estados principales, y el uso práctico del comando ps con diversas opciones (-ef, -l) combinadas con herramientas de paginación como less.

Escenario:

  • Herramientas: Terminal de Linux en un entorno Debian o basado en Debian.
  • Conceptos clave: Proceso, Multitarea/Multiusuario, PID (Process ID), PPID (Parent Process ID), Forking, Estados de procesos (Running, Sleeping, Zombie), Proceso raíz (systemd / init con PID 1) y comando ps.

Instrucciones:

Fase 1: Consulta básica de procesos en la Shell actual (ps)

  • Abre la terminal de Linux en tu sistema.
  • Ejecuta el comando básico de estado de procesos para ver únicamente los procesos asociados a tu sesión actual:
  • ps
  • Observa las columnas devueltas: PID (identificador único del proceso), TTY (terminal donde se ejecuta), TIME (tiempo acumulado de CPU) y CMD (comando o programa ejecutado).
  • Identifica cómo aparece tu propia consola (bash) y la ejecución del propio comando ps que acabas de lanzar.

Fase 2: Inspección detallada y jerarquía Padre-Hijo (ps -ef)

  • Para obtener un listado más detallado en formato completo (full format), añade el parámetro -ef:
  • ps -ef
  • Observa la nueva columna PPID (Parent Process ID). Compara el PID de tu shell (bash) con el PPID del comando ps. Confirma que la shell es el proceso padre que generó el proceso hijo ps mediante una llamada fork.
  • Debido a que la lista de procesos globales es muy extensa, canaliza la salida mediante una tubería hacia el paginador less para revisarla línea por línea:
  • ps -ef | less
  • Navega por la lista usando las flechas o las teclas Re Pág / Av Pág. Presiona la tecla q para salir de la paginación.

Fase 3: Análisis de estados, prioridades y banderas del sistema (ps -l)

  • Muestra la vista en formato largo (long format) ejecutando:
  • ps -l
  • Analiza los campos adicionales:
    • F (Flags): Banderas del sistema (por ejemplo, el valor 4 o indicativos de permisos de superusuario).
    • S (State): Estado del proceso. Observa la letra S (Sleeping / Suspendido e interrumpible) y la letra R (Running / En ejecución).
    • UID / USER: Usuario propietario del proceso.
    • PRI / NI: Prioridad del proceso y valor Nice de cortesía asignado por el kernel.
    • SZ / RSS: Uso de memoria asignado al proceso.

Fase 4: Rastreo del proceso raíz y verificación de enlace a systemd

  • Usa nuevamente ps -ef | less e ir al inicio del listado para localizar el proceso con PID 1 (proceso inicial del sistema).
  • Abre una nueva ventana o pestaña de la terminal y verifica hacia dónde apunta el ejecutable clásico /sbin/init mediante un listado detallado:
  • ls -l /sbin/init
  • Comprueba que en las distribuciones Linux modernas, /sbin/init es un enlace simbólico orientado a /systemd/systemd.
  • Limpia la pantalla de la terminal para finalizar:
  • clear

Preguntas de reflexión:

  1. ¿Qué es un proceso en Linux y qué recursos le asigna el sistema operativo para su ejecución?
  2. ¿Qué significan las siglas PID y PPID, y cuál es la relación entre ambas en la estructura jerárquica de Linux?
  3. ¿En qué consiste el concepto de fork o forking dentro de la gestión de procesos?
  4. ¿Qué es un proceso "Zombie" y por qué se produce en el sistema?
  5. ¿Cuál es el proceso raíz (PID 1) en los sistemas Linux modernos y qué función cumple?
  6. ¿Qué diferencia existe entre ejecutar ps a secas y ejecutar ps -ef?
  7. En la salida de ps -l, ¿qué representan los estados S (Sleeping) y R (Running)?
  8. ¿Por qué el propio comando ps aparece listado en la salida cuando ejecutamos ps en la consola?
  9. ¿Para qué resulta útil combinar el comando ps -ef con la tubería y el comando less (ps -ef | less)?
  10. ¿Qué representan los corchetes [...] alrededor del nombre de un proceso en el listado del sistema (ej. [kthreadd])?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué es un proceso en Linux y qué recursos le asigna el sistema operativo para su ejecución?

Un proceso es una instancia de un programa en ejecución dentro del sistema operativo. El kernel de Linux le asigna un tiempo de CPU, una porción de memoria RAM, un conjunto de instrucciones, variables de entorno y descriptores de archivos necesarios para realizar su tarea.


2. ¿Qué significan las siglas PID y PPID, y cuál es la relación entre ambas en la estructura jerárquica de Linux?

PID significa Process ID (identificador único del proceso) y PPID significa Parent Process ID (identificador del proceso padre). Todos los procesos en Linux (excepto el proceso inicial) tienen un PPID que apunta al proceso que los creó, formando una estructura de árbol jerárquico.


3. ¿En qué consiste el concepto de fork o forking dentro de la gestión de procesos?

Es la llamada al sistema mediante la cual un proceso padre crea una copia o proceso hijo. El hijo hereda propiedades del padre como el usuario (UID), grupo (GID), entorno y variables, permitiendo ejecutar una nueva tarea en paralelo o de forma subordinada.


4. ¿Qué es un proceso "Zombie" y por qué se produce en el sistema?

Es un proceso que ha finalizado su ejecución pero que aún mantiene su entrada en la tabla de procesos del kernel porque su proceso padre no ha leído todavía su código de salida o estado de terminación.


5. ¿Cuál es el proceso raíz (PID 1) en los sistemas Linux modernos y qué función cumple?

El proceso con PID 1 es el proceso inicial del sistema (tradicionalmente llamado init y en las distribuciones modernas sustituido por systemd). Es el primer proceso cargado por el kernel en el arranque y actúa como ancestro/padre directo o indirecto de todos los demás procesos del sistema.


6. ¿Qué diferencia existe entre ejecutar ps a secas y ejecutar ps -ef?

ps sin opciones solo muestra los procesos activos asociados a la terminal actual del usuario. Por otro lado, ps -ef muestra la totalidad de los procesos que se están ejecutando en todo el sistema (-e) con un formato de listado completo que incluye UID, PID, PPID, hora de inicio, etc. (-f).


7. En la salida de ps -l, ¿qué representan los estados S (Sleeping) y R (Running)?

El estado S (Sleeping) indica que el proceso está suspendido o a la espera de un evento (como entrada/salida o señal del usuario). El estado R (Running) indica que el proceso se encuentra actualmente en ejecución o en la cola de la CPU listo para ejecutarse.


8. ¿Por qué el propio comando ps aparece listado en la salida cuando ejecutamos ps en la consola?

Porque para mostrar la lista de procesos, la shell crea un proceso hijo que ejecuta la orden ps. En el instante exacto en que ps escanea los procesos activos del sistema, él mismo está en ejecución (estado R), por lo que se auto-registra en el informe final.


9. ¿Para qué resulta útil combinar el comando ps -ef con la tubería y el comando less (ps -ef | less)?

Dado que el listado global de procesos de Linux contiene cientos de entradas que desbordan la pantalla, canalizar la salida hacia less permite congelar la vista y navegar cómodamente página a página o realizar búsquedas interactivas de procesos.


10. ¿Qué representan los corchetes [...] alrededor del nombre de un proceso en el listado del sistema (ej. [kthreadd])?

Los nombres entre corchetes identifican **hilos del kernel** (kernel threads). Son procesos internos gestionados directamente por el núcleo del sistema operativo para tareas de infraestructura y control de hardware, no aplicaciones de espacio de usuario.


Ficha de Laboratorio: Introducción a la Gestión de Procesos en Linux

Instrucciones de entrega:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Consulta de procesos de la sesión actual con ps.
    Escribe la orden básica para consultar los procesos de tu shell actual:

    Copia la salida devuelta por la terminal indicando PID, TTY, TIME y CMD:

    Indica cuál es el PID de tu consola bash y cuál el de la orden ps:
  2. Análisis de la relación Padre-Hijo con ps -ef.
    Escribe el comando para listar detalladamente todos los procesos del sistema con paginación:

    Copia los datos de la línea correspondiente a tu shell (bash) y al proceso ps:

    Explica cómo se refleja la relación Padre-Hijo observando las columnas PID y PPID:
  3. Inspección de estados y parámetros con ps -l.
    Escribe la orden para mostrar el formato largo de procesos:

    Copia el resultado devuelto por la terminal:

    Indica qué estado (columna S) presenta el proceso bash y cuál el proceso ps, explicando qué significa cada letra:
  4. Identificación del proceso raíz PID 1 y verificación de systemd.
    Escribe el comando para comprobar hacia dónde apunta el archivo /sbin/init:

    Copia la salida devuelta por el sistema:

    Explica la importancia del proceso PID 1 en la jerarquía de arranque del sistema operativo:
  5. Identificación de hilos del kernel.
    Observando la salida de ps -ef, localiza y escribe un ejemplo de proceso que aparezca entre corchetes [...]:

    Indica cuál es el PID y PPID de dicho proceso:

    Explica qué diferencia a este tipo de procesos respecto a una aplicación normal de usuario: