Cómo manejar la suspensión de trabajos de la terminal

LinuxBeginner
Practicar Ahora

Introducción

La terminal de Linux es una herramienta poderosa que permite a los usuarios interactuar con el sistema operativo a través de una interfaz de línea de comandos. Una de las características clave de la terminal de Linux es la capacidad de administrar y controlar trabajos (jobs), que son esencialmente procesos en ejecución. Este tutorial explorará los conceptos básicos de los trabajos de la terminal de Linux, sus aplicaciones y demostrará técnicas para suspender y reanudar trabajos de la terminal.

Comprender los trabajos de la terminal de Linux

La terminal de Linux es una herramienta poderosa que permite a los usuarios interactuar con el sistema operativo a través de una interfaz de línea de comandos. Una de las características clave de la terminal de Linux es la capacidad de administrar y controlar trabajos (jobs), que son esencialmente procesos en ejecución. En esta sección, exploraremos los conceptos básicos de los trabajos de la terminal de Linux, sus aplicaciones y mostraremos algunos ejemplos de código.

¿Qué son los trabajos de la terminal de Linux?

En la terminal de Linux, un trabajo (job) se refiere a un proceso que se está ejecutando en primer plano (foreground) o en segundo plano (background). Cuando un usuario ejecuta un comando en la terminal, la shell crea un nuevo proceso para ejecutar ese comando, y este proceso se considera un trabajo. Los trabajos pueden ser interactivos, donde el usuario proporciona entrada al proceso en ejecución, o no interactivos, donde el proceso se ejecuta sin intervención del usuario.

Ver y controlar trabajos

La terminal de Linux proporciona varios comandos para ver y controlar trabajos:

  • jobs: Este comando lista todos los trabajos que se están ejecutando actualmente en la sesión de shell actual.
  • fg: Este comando trae un trabajo suspendido al primer plano, lo que permite al usuario interactuar con él.
  • bg: Este comando reanuda un trabajo suspendido en segundo plano.

A continuación, un ejemplo de cómo usar estos comandos:

## Start a long-running process in the background
$ sleep 60 &
[1] 12345

## List the running jobs
$ jobs
[1]+ Running sleep 60 &

## Suspend the job by pressing Ctrl+Z
^Z
[1]+ Stopped sleep 60

## Resume the job in the background
$ bg
[1]+ sleep 60 &

## Bring the job to the foreground
$ fg
sleep 60

En este ejemplo, iniciamos un comando sleep 60 de larga duración en segundo plano, lo suspendemos usando Ctrl+Z, lo reanudamos en segundo plano usando bg y luego lo traemos al primer plano usando fg.

Control de trabajos y jerarquía de procesos

Los trabajos de la terminal de Linux forman parte de una jerarquía de procesos, donde cada trabajo es un proceso hijo del proceso de la shell. Esta jerarquía permite técnicas avanzadas de control de trabajos, como:

  • Terminar un trabajo y todos sus procesos hijos
  • Monitorear el estado del trabajo y el uso de recursos
  • Redirigir la entrada/salida de los trabajos

La jerarquía de procesos se puede visualizar mediante un árbol de procesos, que se puede generar usando el comando pstree.

graph TD shell[Shell Process] job1[Job 1] job2[Job 2] job3[Job 3] shell --> job1 shell --> job2 shell --> job3

En este ejemplo, el proceso de la shell es el padre de los tres procesos de trabajo.

Al comprender los conceptos de los trabajos de la terminal de Linux y la jerarquía de procesos, los usuarios pueden administrar y controlar de manera efectiva la ejecución de sus comandos y aplicaciones, lo que conduce a flujos de trabajo más eficientes y productivos.

Suspender y reanudar trabajos de la terminal

En la terminal de Linux, la capacidad de suspender y reanudar trabajos es una función poderosa que permite a los usuarios administrar sus procesos en ejecución de manera más efectiva. Esta sección explorará los conceptos y técnicas involucrados en la suspensión y reanudación de trabajos de la terminal.

Suspender trabajos

Suspender un trabajo en la terminal de Linux significa pausar su ejecución, lo que permite al usuario reanudarlo más tarde o moverlo al segundo plano. Esto se hace típicamente utilizando el atajo de teclado Ctrl+Z, que envía una señal SIGTSTP al trabajo en ejecución actualmente, lo que hace que se detenga.

Una vez que un trabajo está suspendido, se puede listar utilizando el comando jobs, que mostrará el estado del trabajo como "Stopped" (Detenido). En este punto, el usuario puede reanudar el trabajo en primer plano utilizando el comando fg o moverlo al segundo plano utilizando el comando bg.

A continuación, un ejemplo:

## Start a long-running process
$ sleep 60
^Z
[1]+ Stopped sleep 60

## List the suspended job
$ jobs
[1]+ Stopped sleep 60

## Resume the job in the foreground
$ fg
sleep 60

## Suspend the job again
^Z
[1]+ Stopped sleep 60

## Move the job to the background
$ bg
[1]+ sleep 60 &

Reanudar trabajos suspendidos

Para reanudar un trabajo suspendido, se puede utilizar el comando fg para traerlo al primer plano o el comando bg para reanudarlo en el segundo plano.

Cuando un trabajo se reanuda en primer plano, el usuario puede interactuar con él directamente, proporcionando entrada o monitoreando su salida. Cuando un trabajo se reanuda en segundo plano, continúa ejecutándose sin intervención del usuario, y el usuario puede volver al indicador de la shell para realizar otras tareas.

Es importante tener en cuenta que cuando un trabajo se suspende y se reanuda, su estado se conserva, lo que permite al usuario continuar la tarea desde donde se pausó.

Al entender cómo suspender y reanudar trabajos de la terminal, los usuarios pueden administrar eficazmente sus flujos de trabajo, pausar tareas de larga duración y cambiar entre múltiples procesos, lo que conduce a una experiencia de terminal más eficiente y productiva.

Técnicas avanzadas de control de trabajos

Si bien los comandos básicos para administrar trabajos en la terminal de Linux, como jobs, fg y bg, son esenciales, también existen técnicas más avanzadas que los usuarios pueden aprovechar para tener un mayor control sobre sus procesos en ejecución. En esta sección, exploraremos algunas de estas técnicas avanzadas de control de trabajos.

Terminar trabajos

Además de suspender y reanudar trabajos, los usuarios también pueden terminar trabajos en ejecución utilizando el comando kill. Este comando envía una señal al proceso objetivo, que se puede utilizar para apagar el proceso de forma adecuada o forzar su terminación.

## Start a long-running process
$ sleep 60 &
[1] 12345

## Terminate the job
$ kill %1
[1]+ Terminated sleep 60

En este ejemplo, utilizamos el comando kill con el número de trabajo (%1) para terminar el proceso sleep 60 que se está ejecutando en segundo plano.

Programación y automatización de trabajos

Los usuarios de Linux también pueden programar trabajos para que se ejecuten en momentos o intervalos específicos utilizando herramientas como cron y at. Esto permite la automatización de tareas repetitivas, como copias de seguridad, mantenimiento del sistema o procesamiento de datos.

A continuación, un ejemplo de cómo utilizar cron para programar un trabajo:

## Edit the crontab
$ crontab -e

## Add a cron job to run a script every weekday at 8 AM
0 8 * * 1-5 /path/to/script.sh

Este trabajo de cron ejecutará el script script.sh todos los días laborables (de lunes a viernes) a las 8 de la mañana.

Monitoreo y generación de informes de trabajos

Para monitorear el estado y el uso de recursos de los trabajos en ejecución, los usuarios pueden aprovechar herramientas como top, htop y ps. Estas herramientas proporcionan información detallada sobre los procesos que se están ejecutando en el sistema, incluyendo su uso de CPU y memoria, así como el usuario y el comando asociados a cada proceso.

$ top
Tasks: 193 total,   1 running, 192 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3921036 total,   226748 free,   641124 used,  3053164 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  2666448 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 12345 user      20   0   10.0m   2.4m   1.4m S   0.3  0.1   0:00.13 sleep

Esta salida de top muestra los procesos en ejecución actualmente, incluyendo el trabajo sleep que iniciamos anteriormente.

Al aprovechar estas técnicas avanzadas de control de trabajos, los usuarios de Linux pueden obtener un control más detallado sobre sus procesos en ejecución, automatizar tareas repetitivas y monitorear el rendimiento y el uso de recursos de sus aplicaciones, lo que conduce a una experiencia de terminal más eficiente y productiva.

Resumen

En este tutorial, has aprendido sobre los conceptos fundamentales de los trabajos de la terminal de Linux, incluyendo cómo ver y controlarlos utilizando comandos como jobs, fg y bg. También has explorado el control de trabajos y la jerarquía de procesos en la terminal de Linux, lo que permite técnicas avanzadas de gestión de trabajos. Al entender y aplicar estas habilidades, puedes mejorar tu productividad en la línea de comandos y administrar de manera eficiente tus procesos en ejecución en el entorno de Linux.