Dominio de la Gestión de Procesos en Sistemas Linux

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 8,88 KB

Gestión de Procesos

La gestión de procesos define un proceso como una representación de la ejecución de un programa y su entorno de ejecución. Un proceso demonio es un proceso que se ejecuta permanentemente en el sistema.

Datos de identificación de un proceso

Los datos de identificación incluyen:

  • PID: Número único que identifica el proceso. El primer proceso se llama init o systemd.
  • PPID: Número del proceso padre. Cada proceso puede iniciar otros procesos, denominados procesos hijos.
  • UID y GID: Número de usuario y grupo correspondiente a la cuenta de usuario que inicia el proceso.
  • Duración y prioridad del proceso: Tiempo de ejecución consumido desde la última invocación.
  • Directorio de trabajo activo: Al iniciarse el proceso, se configura el directorio actual del mismo.
  • Ficheros abiertos: Existe una tabla con los ficheros abiertos que, al principio, solo contiene tres representantes: 0, 1 y 2. Con cada apertura de proceso, la tabla se rellena.

Listado de Procesos

Comandos PS

  • ps: Muestra el estado de los procesos en curso que el usuario ha iniciado.
  • ps -f: Muestra información extendida.
  • ps -e: Permite obtener información de todos los procesos del sistema.
  • ps -u: Precisa una lista de uno o varios usuarios separados por una coma.
  • -G: Similar al anterior, pero para los grupos.
  • -t: Filtra por terminales.
  • -p: Filtra por unos PID determinados.
  • ps -l: Ofrece información técnica detallada.

La salida generada por ps comienza con una línea de encabezado que muestra el significado de cada columna. La información importante mostrada incluye:

  • Nombre de usuario: Nombre del usuario que ejecuta el programa.
  • ID del proceso: El PID asociado al proceso.
  • TTY: Código utilizado para identificar un terminal. No todos los procesos tienen números de TTY (como los programas X y los demonios).
  • Tiempo de CPU: Se mide mediante TIME (cantidad total de tiempo de CPU consumido) y %CPU (porcentaje de tiempo de CPU que utiliza el proceso en el momento de ejecutar ps).
  • Prioridad de la CPU: Se visualiza en la columna NI (códigos de prioridad). El valor por defecto es 0; los valores positivos indican una prioridad reducida y los valores negativos una prioridad incrementada.
  • Uso de la memoria: Se detalla en los encabezados RSS (tamaño del conjunto residente, memoria utilizada por el programa y su información), %MEM (porcentaje de memoria que utiliza el programa) y SHARE (memoria compartida con otros procesos o bibliotecas compartidas).
  • Comando: La última columna suele ser el comando utilizado para iniciar el proceso.

Campo STAT: Estados del Proceso

Indica el estado actual del proceso mediante los siguientes códigos:

  • R: Proceso en curso de ejecución.
  • T: Proceso parado (se puede reiniciar).
  • S: Proceso dormido (en ejecución pero sin actividad por el momento).
  • D: Proceso dormido en espera de un recurso (no se pueden interrumpir).
  • Z: Proceso zombie (terminado, pero sigue existiendo hasta que su padre recupere su código).
  • <: Alta prioridad.
  • N: Baja prioridad.
  • L: Tiene páginas bloqueadas en memoria.
  • s: Líder de sesión.
  • +: Está en el grupo de procesos en primer plano.

Más comandos de visualización

  • ps l: Permite ver específicamente el campo STAT.
  • pstree -Agu: Visualiza el listado de procesos en forma de árbol.
  • ps -N: Niega el efecto de cualquier opción que se haya especificado.

Ejecución en Segundo Plano

El Shell es un proceso que crea un nuevo proceso para ejecutar cada comando insertado. Por defecto, se espera al final de la ejecución del comando anterior para iniciar el siguiente. Sin embargo, este comportamiento puede ser modificado:

  • Utilizando el ampersand "&" se permite la inserción de nuevos comandos sin esperar al final de la ejecución del anterior.
  • Un proceso iniciado en segundo plano no debería esperar ser otro Shell para evitar confusión.
  • El proceso iniciado no debería mostrar resultados en pantalla para evitar conflictos con los del Shell.
  • Si no añadimos el &, no podemos insertar un nuevo comando hasta que termine el actual. Ejemplo: sleep 10 & indica el PID del proceso que se ejecuta en segundo plano.

Jobs: Procesos asociados a la sesión

El comando jobs muestra información sobre los procesos en curso de ejecución asociados con la sesión actual y proporciona los números de ID de las tareas. Asegura que todos los programas han finalizado antes de salir.

  • fg: Devuelve el proceso al primer plano en el terminal.
  • bg: Devuelve una tarea a un estado de ejecución pero en segundo plano.

Parada de un Proceso y Señales

Existen tres formas principales de detener un proceso: Ctrl + Z, Ctrl + / o mediante el comando kill.

  • -s: Envía la señal especificada al proceso (puede ser un número o un nombre).
  • 1 (SIGHUP): El padre manda un hang up a todos sus hijos.
  • 2 (SIGINT): Interrupción del proceso pedido.
  • 9 (SIGKILL): Señal que no se puede ignorar.
  • 15 (SIGTERM): Señal mandada por defecto por el comando kill.

El comando kill solo destruye procesos que pertenecen al usuario que lo ejecuta. Otros comandos relacionados son:

  • stop: Suspende un proceso.
  • cont: Reactiva un proceso.
  • hup: Reinicia el proceso.
  • nohup: Ejecuta un programa que continúa ejecutándose a pesar de que se cierre la sesión.
  • killall [opciones] nombre: Destruye un proceso basándose en su nombre.

Procesos Zombis

Cuando un proceso hijo finaliza, manda una señal SIGCHLD a su proceso padre. Si el padre termina antes que los hijos, estos se convierten en procesos zombis.

Administración de Prioridades

  • nice: Inicia un programa con una prioridad específica. Se puede usar indicando la prioridad con un guion, con -n, o con --adjustment=.
  • renice: Altera la prioridad de un programa en ejecución. Formato: renice [-n prioridad] -p -g -u ID.

Ejemplos de uso:

  • Incrementar prioridad de procesos de varios usuarios: renice -n -valor -u usuario1 usuario2.
  • Prioridad de procesos específicos: renice -n -valor -p pidproceso1 pidproceso2.

Monitorización con el comando TOP

El comando top permite saber cuánto tiempo de CPU consumen varios procesos en tiempo real.

  • -d retardo: Especifica el retardo entre actualizaciones (por defecto 5 segundos).
  • -p pid: Monitoriza procesos específicos.
  • -n iter: Muestra un número concreto de actualizaciones y finaliza.

Comandos interactivos dentro de top:

  • h y ?: Muestran información de ayuda.
  • k: Permite destruir un proceso.
  • q: Sale de la aplicación top.
  • r: Cambia la prioridad del proceso.
  • s: Cambia la velocidad de actualización de los datos.
  • P: Ordena los datos por el uso de CPU.
  • m: Ordena los datos por el uso de memoria.
  • uptime: Permite averiguar la carga media actual del sistema.

Entradas relacionadas: