Gestión de trabajos en Linux

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá los fundamentos de la gestión de trabajos en Linux. La gestión de trabajos es una habilidad esencial para los usuarios de Linux, ya que les permite ejecutar múltiples procesos simultáneamente y controlar su ejecución. Al dominar la gestión de trabajos, puede ejecutar comandos de manera eficiente en segundo plano, cambiar entre tareas en primer y segundo plano y mantener el control sobre todos los procesos en ejecución.

A lo largo de este laboratorio, aprenderá:

  • Cómo iniciar procesos en segundo plano
  • Cómo ver y gestionar los trabajos en ejecución
  • Cómo traer trabajos en segundo plano al primer plano
  • Cómo suspender trabajos en ejecución y reanudarlos más tarde
  • Cómo terminar trabajos cuando ya no son necesarios

Estas habilidades son especialmente útiles cuando se trabaja con tareas de larga duración que no requieren interacción constante, lo que le permite continuar trabajando en otras tareas mientras los procesos se ejecutan en segundo plano.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 91%. Ha recibido una tasa de reseñas positivas del 97% por parte de los estudiantes.

Iniciar y gestionar trabajos en segundo plano

En este paso, aprenderá cómo iniciar un proceso en segundo plano utilizando el símbolo de ampersand (&) y cómo gestionarlo utilizando el comando jobs.

¿Qué es un trabajo en segundo plano?

En Linux, un trabajo es un proceso que el shell gestiona. Por defecto, cuando se ejecuta un comando en un terminal, se ejecuta en primer plano, lo que significa que el terminal está ocupado hasta que el comando se completa. Sin embargo, al agregar el símbolo & al final de un comando, se puede ejecutar en segundo plano, liberando el terminal para otras tareas.

Creación de un proceso en segundo plano

Vamos a crear un script sencillo que se ejecutará continuamente en segundo plano. Esto simulará una tarea de larga duración que es posible que desee ejecutar mientras continúa trabajando en otras cosas.

Primero, navegue al directorio del proyecto si aún no está allí:

cd ~/project

Ahora, cree un script llamado background_task.sh utilizando el editor de texto nano:

nano ~/project/background_task.sh

Dentro del editor, agregue el siguiente contenido:

#!/bin/bash
## A simple script that simulates a long-running task
count=0
while true; do
  count=$((count + 1))
  echo "Task running: iteration $count"
  sleep 5
done

Este script se ejecutará indefinidamente, imprimiendo un mensaje cada 5 segundos.

Presione Ctrl+O seguido de Enter para guardar el archivo, luego Ctrl+X para salir de nano.

A continuación, haga el script ejecutable:

chmod +x ~/project/background_task.sh

Ahora ejecute el script en segundo plano agregando el símbolo & al final del comando:

~/project/background_task.sh &

Debería ver una salida similar a:

[1] 1234

El número entre corchetes [1] es el número de trabajo, y el número después de él es el ID de proceso (PID). Estos números pueden ser diferentes en su sistema.

Verificación de trabajos en ejecución

Para ver todos los trabajos en segundo plano actualmente en ejecución, utilice el comando jobs:

jobs

Debería ver una salida similar a:

[1]  + running    ~/project/background_task.sh

Esto confirma que su script se está ejecutando en segundo plano.

Para obtener información más detallada sobre el trabajo, incluyendo su PID, utilice:

jobs -l

La salida debería mostrar el número de trabajo, el PID y el estado:

[1]  + 1234 running    ~/project/background_task.sh

Su terminal sigue estando disponible para ejecutar otros comandos mientras el script continúa ejecutándose en segundo plano. La salida del script todavía se envía al terminal, por lo que verá mensajes aparecer periódicamente.

Traer trabajos en segundo plano al primer plano

En este paso, aprenderá cómo traer un trabajo en segundo plano al primer plano utilizando el comando fg. Esto es útil cuando necesita interactuar con un proceso que actualmente se está ejecutando en segundo plano.

¿Qué es traer al primer plano?

Traer al primer plano se refiere al proceso de traer un trabajo en segundo plano al primer plano, convirtiéndolo en el proceso activo en su terminal. Cuando un trabajo está en el primer plano, tiene control de su terminal; puede interactuar con él directamente, pero no puede ejecutar otros comandos hasta que se complete o se devuelva al segundo plano.

Uso del comando fg

Asegúrese de que su script background_task.sh todavía esté en ejecución desde el paso anterior. Puede verificar esto con:

jobs

Debería ver su script enumerado como un trabajo en ejecución.

Para traer el trabajo al primer plano, use el comando fg seguido del número de trabajo con un signo de porcentaje:

fg %1

Si solo tiene un trabajo en segundo plano, simplemente puede usar:

fg

Después de ejecutar el comando, el script se traerá al primer plano y verá su salida directamente en su terminal:

Task running: iteration X
Task running: iteration X+1
...

Notará que su indicador de comando desaparece y que el script ahora tiene control de su terminal. Ya no puede ingresar otros comandos hasta que termine el script o lo devuelva al segundo plano.

Detener el trabajo en primer plano

Para detener el trabajo en primer plano y volver al indicador de comando, presione Ctrl+C. Esto envía una señal de interrupción al proceso, lo que hace que se detenga.

^C

La terminal ahora debería mostrar un mensaje que indica que el trabajo se ha terminado, y debería ver su indicador de comando nuevamente.

Para verificar que el trabajo ya no está en ejecución, ejecute:

jobs

No debería haber salida, lo que indica que no hay trabajos en segundo plano en ejecución.

Comencemos nuestro script en segundo plano nuevamente para el siguiente paso:

~/project/background_task.sh &

Debería ver una confirmación de que el trabajo ha comenzado, con una salida similar a:

[1] 1345

Recuerde, el número de trabajo y el PID pueden ser diferentes en su sistema.

Suspender y reanudar trabajos

En este paso, aprenderá cómo suspender un trabajo en primer plano en ejecución y reanudarlo ya sea en primer plano o en segundo plano. Esto es útil cuando necesita pausar temporalmente un proceso sin terminarlo.

Suspender un trabajo en primer plano

Primero, traigamos nuestro trabajo en segundo plano al primer plano:

fg %1

Ahora debería ver la salida del script en su terminal. Para suspender este trabajo en primer plano, presione Ctrl+Z:

^Z

Debería ver un mensaje similar a:

[1]  + suspended  ~/project/background_task.sh

Esto indica que el trabajo se ha suspendido. El trabajo todavía está cargado en memoria, pero no se está ejecutando; es esencialmente "pausado".

Para verificar que el trabajo está suspendido, ejecute:

jobs

Debería ver una salida similar a:

[1]  + suspended  ~/project/background_task.sh

Reanudar un trabajo suspendido en segundo plano

Puede reanudar un trabajo suspendido ya sea en primer plano o en segundo plano. Para reanudarlo en segundo plano, use el comando bg seguido del número de trabajo:

bg %1

Debería ver un mensaje que confirme que el trabajo se ha reanudado en segundo plano:

[1]  + continued  ~/project/background_task.sh

Verifique que el trabajo ahora se está ejecutando en segundo plano:

jobs

La salida debería mostrar que el estado del trabajo ha cambiado de "suspended" (suspendido) a "running" (en ejecución):

[1]  + running    ~/project/background_task.sh

Reanudar un trabajo suspendido en primer plano

Vamos a suspender el trabajo nuevamente. Primero, tráigalo al primer plano:

fg %1

Luego presione Ctrl+Z para suspenderlo:

^Z

Ahora, en lugar de usar bg para reanudarlo en segundo plano, use fg para reanudarlo en primer plano:

fg %1

El trabajo reanudará la ejecución y verá su salida en su terminal nuevamente.

Vamos a detener el trabajo presionando Ctrl+C:

^C

Esto terminará el trabajo y le devolverá al indicador de comando.

Uso del control de trabajos en su flujo de trabajo

La capacidad de suspender, reanudar en segundo plano, reanudar en primer plano y terminar trabajos le da un poderoso control sobre sus procesos. Este flujo de trabajo es particularmente útil cuando:

  1. Necesita comprobar algo más mientras un proceso está en ejecución.
  2. Necesita liberar temporalmente recursos del sistema.
  3. Quiere ejecutar múltiples procesos de forma interactiva sin abrir múltiples ventanas de terminal.

Para el siguiente paso, inicie la tarea en segundo plano nuevamente:

~/project/background_task.sh &

Finalizar trabajos en segundo plano

En este paso, aprenderá diferentes formas de terminar trabajos en segundo plano cuando ya no sean necesarios. La terminación adecuada de los trabajos es importante para liberar recursos del sistema y mantener el rendimiento del sistema.

Identificar trabajos para terminar

Primero, veamos qué trabajos están actualmente en ejecución:

jobs

Debería ver su tarea en segundo plano en ejecución:

[1]  + running    ~/project/background_task.sh

Si desea información más detallada, incluyendo el ID de proceso (PID, por sus siglas en inglés), use:

jobs -l

Esto mostrará una salida similar a:

[1]  + 1456 running    ~/project/background_task.sh

Tome nota del PID (el número después del número de trabajo), ya que se puede utilizar para terminar el proceso.

Método 1: Terminar un trabajo usando su número de trabajo

La forma más directa de terminar un trabajo en segundo plano es usar el comando kill con el número de trabajo:

kill %1

Compruebe si el trabajo se ha terminado:

jobs

Puede ver:

[1]  + terminated  ~/project/background_task.sh

Si el trabajo todavía está en ejecución (algunos procesos pueden requerir una señal de terminación más fuerte), puede usar:

kill -9 %1

La bandera -9 envía una señal SIGKILL, que termina forzosamente el proceso sin permitirle realizar tareas de limpieza.

Método 2: Terminar un trabajo usando su PID

Comencemos otra instancia de nuestro script en segundo plano:

~/project/background_task.sh &

Debería ver una salida que muestra el número de trabajo y el PID:

[1] 1567

Para terminar este trabajo usando su PID, use:

kill 1567

Reemplace 1567 con el PID real de su trabajo.

Verifique que el trabajo se ha terminado:

jobs

Método 3: Usar el nombre del proceso con killall

Comencemos otra instancia de nuestro script:

~/project/background_task.sh &

Si tiene múltiples instancias del mismo proceso en ejecución, puede terminar todas ellas a la vez usando el comando killall:

killall background_task.sh

Este comando termina todos los procesos con el nombre background_task.sh.

Verifique que no hay trabajos en ejecución:

jobs

No debería haber salida, lo que indica que todos los trabajos en segundo plano se han terminado.

Comprender las señales de terminación

Cuando se usa el comando kill, se está enviando una señal al proceso. Por defecto, kill envía la señal SIGTERM (señal 15), que le pide al proceso que se termine de forma elegante. Si un proceso no responde a SIGTERM, puede usar SIGKILL (señal 9) para forzar la terminación:

kill -TERM %1 ## Lo mismo que kill %1
kill -KILL %1 ## Lo mismo que kill -9 %1

Otras señales útiles incluyen:

  • SIGHUP (señal 1): A menudo se utiliza para recargar archivos de configuración.
  • SIGINT (señal 2): Lo mismo que presionar Ctrl+C.
  • SIGSTOP (señal 19): Suspende un proceso (no se puede capturar ni ignorar).
  • SIGCONT (señal 18): Continúa un proceso detenido.

Para una última demostración, comencemos nuestra tarea en segundo plano nuevamente y luego terminémosla:

~/project/background_task.sh &
jobs
kill %1
jobs

Esta secuencia inicia el trabajo, confirma que está en ejecución, lo termina y luego verifica que ya no está en ejecución.

Resumen

En este laboratorio, ha aprendido habilidades esenciales para gestionar trabajos en un entorno Linux:

  1. Iniciar trabajos en segundo plano: Ha aprendido cómo ejecutar procesos en segundo plano utilizando el símbolo &, lo que le permite continuar trabajando en la terminal mientras se ejecutan tareas de larga duración.

  2. Verificar el estado de los trabajos: Ha utilizado el comando jobs para ver información sobre los trabajos en ejecución, incluyendo su estado, número de trabajo e ID de proceso.

  3. Traer trabajos en segundo plano al primer plano: Ha practicado traer trabajos en segundo plano al primer plano utilizando el comando fg, lo que le permite interactuar con ellos directamente.

  4. Suspender y reanudar trabajos: Ha aprendido cómo suspender trabajos en primer plano en ejecución con Ctrl+Z y reanudarlos ya sea en primer plano (fg) o en segundo plano (bg).

  5. Terminar trabajos: Ha explorado diferentes formas de terminar trabajos cuando ya no son necesarios, incluyendo el uso del comando kill con números de trabajo o PIDs, y el uso de killall para terminar múltiples procesos por nombre.

Estas habilidades de gestión de trabajos son valiosas para cualquier usuario de Linux, especialmente cuando se trabaja con procesos de larga duración o cuando se realiza multitarea en un entorno de terminal. Al controlar cómo y cuándo se ejecutan los procesos, puede utilizar de manera más eficiente los recursos de su sistema y optimizar su flujo de trabajo.

Recuerde que se pueden utilizar diferentes señales con el comando kill para controlar el comportamiento de los procesos, desde la terminación elegante hasta la terminación forzada, lo que le da un control detallado sobre los procesos de su sistema.