GNU Bash

Bash

Tutorial Bash: Gestión de procesos con ps, htop y pgrep

Domina la gestión de procesos en Bash y Shell con ps, htop y pgrep. Aprende a monitorizar y controlar procesos de manera eficiente.

Diferencia entre procesos en primer plano y segundo plano

En el entorno de Shell y Bash, la gestión de procesos es fundamental para la ejecución eficiente de tareas. Los procesos en primer plano y segundo plano son dos estados en los que un proceso puede ejecutarse, cada uno con características específicas que influyen en cómo interactúan con el usuario y el sistema.

Un proceso en primer plano es aquel que ocupa la terminal activa, permitiendo la interacción directa del usuario. Mientras un proceso está en primer plano, la terminal está bloqueada para otras entradas hasta que el proceso termine o se suspenda. Esto es útil para tareas que requieren supervisión o interacción constante. Un ejemplo común de un proceso en primer plano es un editor de texto como nano o vim.

Para iniciar un proceso en segundo plano, se utiliza el operador & al final del comando. Los procesos en segundo plano permiten que el usuario continúe utilizando la terminal para otras tareas mientras el proceso se ejecuta. Esto es especialmente útil para tareas largas que no necesitan supervisión constante. Un ejemplo de ejecución de un proceso en segundo plano es:

./mi_script.sh &

Los procesos en segundo plano pueden ser gestionados mediante comandos como jobs, fg, bg, y kill. El comando jobs lista los trabajos actuales, mostrando su estado y número de trabajo. Para traer un proceso en segundo plano al primer plano, se utiliza el comando fg seguido del número de trabajo, por ejemplo:

fg %1

Si un proceso en primer plano se suspende utilizando Ctrl + Z, se puede enviar al segundo plano con el comando bg, permitiendo que continúe su ejecución sin bloquear la terminal:

bg %1

Es importante notar que los procesos en segundo plano no interactúan con la terminal de la misma manera que los procesos en primer plano, lo que significa que no pueden recibir entradas directamente de la misma. Sin embargo, pueden seguir generando salida estándar que se puede redirigir o gestionar según sea necesario.

Finalmente, para terminar un proceso en segundo plano, se utiliza el comando kill seguido del PID (Process ID) del proceso o del número de trabajo. Por ejemplo, para terminar un proceso con PID 1234:

kill 1234

O utilizando el número de trabajo:

kill %1

La comprensión y manejo de estos conceptos es esencial para la gestión eficiente de procesos en cualquier entorno de comandos Linux, especialmente al trabajar con Bash scripts y Shell.

Visualización y monitorización de procesos con ps, top, htop

La visualización y monitorización de procesos en sistemas Linux es una tarea crucial para la administración de sistemas y la optimización del rendimiento. Los comandos ps, top y htop son herramientas esenciales para obtener información detallada sobre los procesos que se están ejecutando en un sistema.

ps

El comando ps proporciona una instantánea estática de los procesos en ejecución. Es útil para obtener información específica de procesos en un momento dado. Por defecto, ps muestra los procesos asociados a la terminal actual, pero se puede personalizar para obtener más detalles. Algunos de los parámetros más utilizados incluyen:

  • ps aux: Muestra todos los procesos en ejecución junto con información detallada como el usuario, el PID, la cantidad de CPU y memoria utilizada, y el tiempo de ejecución.
  • ps -ef: Muestra una lista detallada de todos los procesos en ejecución en formato estándar.
  • ps -ef --forest: Ofrece una vista jerárquica de todos los procesos, mostrando la relación entre procesos padre e hijo.

Ejemplo de uso de ps:

ps aux | grep nombre_proceso

Este comando filtra los procesos para mostrar solo aquellos que contienen "nombre_proceso".

top

El comando top proporciona una vista dinámica y en tiempo real de los procesos. Actualiza constantemente la lista de procesos, permitiendo al usuario ver cómo cambian los recursos del sistema. top es particularmente útil para identificar procesos que consumen muchos recursos y puede ser configurado para mostrar diferentes métricas, como la utilización de CPU, memoria y tiempo de ejecución. Al iniciar top, se puede interactuar con la interfaz usando comandos como:

  • k: Permite enviar una señal de terminación a un proceso especificando su PID.
  • r: Cambia la prioridad de un proceso.
  • q: Salir de top.

htop

El comando htop es una versión mejorada y más intuitiva de top. Proporciona una interfaz de usuario más amigable y permite navegar por los procesos usando el teclado. Algunas de las características de htop incluyen:

  • Uso de teclas de función para realizar acciones como enviar señales (F9) o cambiar la prioridad de un proceso (F7 y F8).
  • Capacidad de buscar procesos por nombre o PID presionando /.
  • Posibilidad de ordenar procesos por diferentes criterios como CPU, memoria o tiempo, utilizando las teclas de flechas.

Ejemplo de uso de htop:

htop

La utilización de estas herramientas es fundamental para el análisis y resolución de problemas de rendimiento en sistemas Linux. En el contexto de Bash scripts y Shell, conocer cómo funcionan estos comandos Linux permite a los desarrolladores optimizar sus scripts y gestionar eficientemente los recursos del sistema.

Buscar procesos con pgrep

El comando pgrep es una herramienta eficiente para buscar procesos en un sistema Linux, permitiendo a los usuarios localizar rápidamente procesos en ejecución basándose en patrones de búsqueda. Este comando es parte de los comandos Linux utilizados para la gestión de procesos y es especialmente útil en Bash scripts y entornos Shell donde se requiere manipular o monitorear procesos programáticamente.

pgrep simplifica la búsqueda de procesos al evitar la necesidad de usar combinaciones de comandos como ps y grep. Su sintaxis básica es:

pgrep [opciones] patrón

Donde "patrón" es una expresión regular que coincide con el nombre del proceso que se desea encontrar. Por ejemplo, para buscar el PID de un proceso llamado "nginx", se utilizaría:

pgrep nginx

A continuación, se describen algunas de las opciones más utilizadas con pgrep:

  • -l: Muestra no solo el PID sino también el nombre del proceso que coincide con el patrón. Ejemplo:
  pgrep -l ssh
  • -u usuario: Filtra los procesos para mostrar solo aquellos que pertenecen a un usuario específico. Por ejemplo, para encontrar procesos ejecutados por el usuario "root":
  pgrep -u root
  • -f: Permite buscar en la línea de comando completa, no solo en el nombre del proceso. Esto es útil cuando se necesita buscar procesos por argumentos de línea de comando. Ejemplo:
  pgrep -f "python script.py"
  • -n: Devuelve solo el PID del proceso más reciente que coincide con el patrón. Esto es útil cuando se quieren identificar procesos recién iniciados. Ejemplo:
  pgrep -n nginx
  • -o: Devuelve el PID del proceso más antiguo que coincide con el patrón, útil para identificar procesos que han estado ejecutándose durante más tiempo. Ejemplo:
  pgrep -o nginx

pgrep es especialmente valioso en Bash scripts donde se necesita operar sobre procesos de manera automatizada. Por ejemplo, para verificar si un proceso está corriendo y tomar acción en base a ello, se podría usar:

if pgrep my_process > /dev/null
then
    echo "El proceso está en ejecución."
else
    echo "El proceso no está en ejecución."
fi

En resumen, pgrep es una herramienta rápida y eficaz para la búsqueda de procesos en entornos Linux, simplificando tareas que de otro modo requerirían comandos más complejos. Su integración en Bash scripts y Shell permite a los desarrolladores gestionar procesos de manera eficiente y precisa.

Envío de señales a procesos

En el entorno de Bash y Shell, el envío de señales a procesos es una técnica fundamental para controlar y gestionar procesos en ejecución. Las señales son un mecanismo que permite a los usuarios y al sistema operativo interactuar con los procesos, notificándoles eventos o solicitando acciones específicas. Existen varias señales estándar en sistemas Linux, cada una con un propósito específico, como terminar un proceso, detenerlo temporalmente o solicitar que vuelva a leer su configuración.

La señal más comúnmente utilizada es SIGTERM, que solicita a un proceso que termine de manera ordenada. Se envía utilizando el comando kill seguido del PID del proceso:

kill -SIGTERM 1234

Si un proceso no responde a SIGTERM, se puede usar SIGKILL para forzar su terminación inmediata. Esta señal no permite que el proceso realice ningún tipo de limpieza antes de finalizar:

kill -SIGKILL 1234

Otra señal común es SIGHUP, que originalmente se utilizaba para notificar a los procesos que la terminal de la que dependían se había desconectado. Hoy en día, muchos demonios la utilizan para volver a cargar su configuración sin necesidad de reiniciarse:

kill -SIGHUP 1234

El comando kill se puede usar con diferentes opciones:

  • kill -l: Lista todas las señales disponibles en el sistema.
  • kill -s [señal] [PID]: Envía una señal específica a un proceso determinado. Por ejemplo, kill -s SIGSTOP 1234 detiene temporalmente el proceso con PID 1234.

Además de kill, existen otros comandos para enviar señales a procesos:

  • killall: Envía señales a todos los procesos que coincidan con un nombre. Por ejemplo, para finalizar todos los procesos llamados "httpd":
killall httpd
  • pkill: Similar a killall, pero permite el uso de patrones y expresiones regulares para identificar procesos. Por ejemplo, para enviar SIGTERM a todos los procesos que contienen "python":
pkill python
  • xkill: Una utilidad gráfica para matar aplicaciones X11, útil en entornos de escritorio.

El envío de señales es un componente esencial en la gestión de procesos, especialmente en la administración de servicios y tareas automatizadas mediante Bash scripts. Comprender cómo y cuándo usar cada señal es crucial para el manejo eficiente de procesos en comandos Linux.

Certifícate en Bash con CertiDevs PLUS

Ejercicios de esta lección Gestión de procesos con ps, htop y pgrep

Evalúa tus conocimientos de esta lección Gestión de procesos con ps, htop y pgrep con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Bash

Accede a todas las lecciones de Bash y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Principales Distribuciones De Linux

GNU Bash

Introducción Y Entorno

Instalar Ubuntu En Windows Con Wsl

GNU Bash

Introducción Y Entorno

Introducción A Shell Y Bash

GNU Bash

Introducción Y Entorno

Comandos De Navegación Pwd, Cd Y Ls

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Manipulación De Archivos Y Directorios

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Comprimir Y Descomprimir Archivos En Bash Con Tar Y Gzip

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Manipulación De Permisos De Archivos Y Directorios Con Chmod, Chown Y Chgrp

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Enlaces Simbólicos Y Duros

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Redirección Y Tuberías

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Gestión De Procesos Con Ps, Htop Y Pgrep

GNU Bash

Gestión De Procesos Y Servicios

Gestión De Servicios Con Systemd

GNU Bash

Gestión De Procesos Y Servicios

Configuración De Bash

GNU Bash

Interacción Con El Sistema

Redes Y Comunicación Con Ifconfig, Ip Y Netstat

GNU Bash

Interacción Con El Sistema

Transferencia De Archivos Y Comunicación Remota Con Ssh

GNU Bash

Interacción Con El Sistema

Gestión De Paquetes Y Dependencias Y Actualización Del Sistema

GNU Bash

Interacción Con El Sistema

Variables Y Tipos De Datos

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Operadores

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Sintaxis De Control De Flujo

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Expresiones Regulares Y Manipulación De Texto

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Definición Y Uso De Funciones

GNU Bash

Sintaxis Y Creación De Scripts En Bash

En esta lección

Objetivos de aprendizaje de esta lección

  • Diferenciar entre procesos en primer plano y segundo plano.
  • Utilizar ps para obtener información detallada de los procesos.
  • Monitorizar procesos en tiempo real con top y htop.
  • Buscar procesos de manera eficiente con pgrep.
  • Enviar señales a procesos usando kill y comandos relacionados.
  • Automatizar la gestión de procesos mediante Bash scripts.