Los shells interactivos utilizan el control de trabajos para coordinar tuberías dentro de una sesión de terminal. Un trabajo puede contener un solo proceso o una tubería completa, normalmente agrupados en un grupo de procesos para que la terminal y el shell puedan tratarlos como una unidad.
Procesos · Lección 11
Control de trabajos
Aprende cómo un shell interactivo gestiona trabajos en primer plano, en segundo plano y detenidos.
Iniciar un trabajo en segundo plano
Añade & para iniciar una tubería de forma asíncrona:
$ sleep 1000 &
[1] 18420
El shell devuelve el prompt sin esperar a que termine el trabajo. Ejecutarlo en segundo plano no redirige automáticamente su salida, no lo desvincula de la terminal de control ni hace que sobreviva al cierre de la sesión. Redirige explícitamente la entrada y la salida cuando sea necesario, y utiliza un gestor de servicios, un planificador o un multiplexor de terminal para los trabajos que deban sobrevivir al shell interactivo.
Un trabajo en segundo plano que intenta leer de la terminal de control suele detenerse mediante SIGTTIN porque no pertenece al grupo de procesos en primer plano de la terminal.
¿Qué solicita a un shell interactivo un & al final?
Listar los trabajos del shell
La orden interna jobs muestra los trabajos conocidos por el shell actual:
$ jobs
[1] Running sleep 1000 &
[2]- Running sleep 1001 &
[3]+ Stopped sleep 1002
El número entre corchetes es un identificador de trabajo del shell, no un PID. El prefijo % forma una especificación de trabajo como %1. El marcador + identifica el trabajo actual que muchas órdenes seleccionan cuando no reciben un operando; - identifica el trabajo anterior.
Como la tabla de trabajos pertenece a un único shell, el shell de otra terminal no puede normalmente mostrar ni referirse a estos trabajos mediante sus propias órdenes internas jobs, fg o bg.
¿Qué muestra la orden interna jobs?
Detener y continuar un trabajo
Mientras un trabajo está en primer plano, al pulsar Ctrl-Z la terminal suele enviar SIGTSTP a su grupo de procesos en primer plano. El shell recupera el control después de que el trabajo se detenga:
$ sleep 1002
^Z
[3]+ Stopped sleep 1002
Continúa el trabajo actual detenido en segundo plano con:
$ bg
bg envía una señal de continuación y deja el trabajo fuera del primer plano de la terminal. Solo resulta útil para un trabajo detenido; una orden que ya se ejecuta en segundo plano no necesita reanudarse.
¿Qué hace bg %3 con el trabajo 3 detenido?
Mover un trabajo al primer plano
Utiliza fg con una especificación de trabajo para convertir un trabajo en el grupo de procesos en primer plano de la terminal y esperar a que termine:
$ fg %1
Sin un operando, fg suele seleccionar el trabajo actual marcado con +. Un trabajo detenido se continúa al pasar al primer plano.
¿Qué hace fg %1?
Enviar señales a un trabajo
Los shells permiten que kill acepte una especificación de trabajo:
$ kill -TERM %1
Normalmente, esto envía la señal al grupo de procesos del trabajo y no solo a un miembro de la tubería. Examina primero el trabajo seleccionado y utiliza SIGTERM antes de plantearte una medida forzosa. Las especificaciones de trabajo son sintaxis del shell; los scripts y las herramientas externas suelen trabajar con PID o identificadores de grupo de procesos verificados.
¿Qué operando se refiere al trabajo 1 del shell en vez de al proceso con PID 1?
Practica estas operaciones con órdenes inofensivas como sleep en el laboratorio Gestionar y supervisar procesos de Linux.
Lección completada
Has completado Control de trabajos
Ahora puedes mover deliberadamente trabajos entre los estados controlados por el shell.
Utiliza
¶ iniciar un trabajo en segundo plano sin desvincularlo automáticamente.Utiliza
jobspara examinar la tabla de trabajos del shell actual.Detén un trabajo con
Ctrl-Zy continúalo en segundo plano conbg.Devuelve un trabajo seleccionado a la terminal con
fg.Especifica los trabajos del shell mediante
%JOB_IDal enviar señales.
Guarda tu progreso
Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.
Crear una cuenta gratuita