Comando Linux fg
Guía completa de comandos Linux
fgEs un comando importante para el control de procesos en sistemas Linux/Unix, su nombre completo es "foreground" (primer plano). Su función principal es cambiar los trabajos (jobs) que se ejecutan en segundo plano al primer plano para continuar su ejecución.
¿Por qué se necesita el comando fg?
Imagina que estás pidiendo comida en un restaurante:
- Pides el plato principal (proceso en primer plano)
- Al mismo tiempo, pides a la cocina que prepare el postre (proceso en segundo plano)
- Cuando terminas el plato principal, puedes pedir al camarero que traiga el postre a la mesa (comando fg)
En Linux, este mecanismo de conmutación de trabajos entre primer plano y segundo plano te permite:
- Controlar flexiblemente el orden de ejecución de múltiples tareas
- Suspender temporalmente la tarea actual para atender asuntos más urgentes
- Utilizar eficientemente las sesiones de terminal
Sintaxis básica
fg [作业标识]
Descripción de parámetros
| Parámetro | Descripción |
|---|---|
| Sin parámetros | Restaura el trabajo que se puso en segundo plano más recientemente |
| %n | Restaura el trabajo con número de trabajo n |
| %str | Restaura el trabajo que comienza con str |
| %?str | Restaura el trabajo que contiene str |
| %+ o %% | Equivale a sin parámetros, restaura el trabajo más reciente |
| %- | Restaura el penúltimo trabajo que se puso en segundo plano |
Ejemplos de uso
Ejemplo 1: Uso básico
Inicia una tarea de larga duración y colócala en segundo plano:
sleep 60 & [1] 12345 # 系统返回作业号 [1] 和进程ID 12345
Ver la lista de trabajos actuales:
jobs [1]+ 运行中 sleep 60 &
Traer el trabajo de vuelta al primer plano:
fg %1 # 或者简写为 fg
Ejemplo 2: Restaurar un trabajo específico
Ejemplo
python script1.py &
python script2.py &
# Ver la lista de trabajos
jobs
[1]- En ejecución python script1.py&
[2]+ En ejecución python script2.py&
# Restaurar el primer trabajo
fg %1
Cómo funciona
Transición de estados del proceso
Ejemplo
A[Ejecución en primer plano] -->|Ctrl+Z| B[Estado de pausa]
B -->|fg| A
B -->|bg| C[Ejecución en segundo plano]
C -->|fg| A
- Proceso en primer plano: Ocupa la terminal y recibe entrada del teclado
- Proceso en segundo plano: No ocupa la terminal y no puede recibir entrada
- Proceso en pausa: Suspendido, esperando ser restaurado
Mecanismo de señales
Cuando se ejecutafg:
- El sistema envía al trabajo
SIGCONTSeñal (continuar ejecución) - Establece el grupo de procesos del trabajo como el grupo de procesos en primer plano de la terminal
- La terminal redirige la entrada/salida a ese proceso
Preguntas frecuentes
P1: ¿Cómo saber qué trabajos en segundo plano hay actualmente?
Usajobsel comando para ver:
Ejemplo
Ejemplo de salida:
[1]- 12345 运行中 sleep 100 & [2]+ 12346 停止 vim file.txt
P2: ¿Cuál es la diferencia entre fg y bg?
| Comando | Función | Control de terminal |
|---|---|---|
| fg | Lleva el trabajo al primer plano | Ocupa la terminal |
| bg | Hace que el trabajo en pausa continúe ejecutándose en segundo plano | No ocupa la terminal |
P3: ¿Por qué el programa no puede recibir entrada después de fg?
Puede que el programa esté en pausa (se muestra como "Detenido"), primero es necesario enviar la señal de continuación:
Ejemplo
fg %1
Escenarios de aplicación práctica
Escenario 1: Desarrollo y depuración
>Iniciar el servidor de desarrollo:
Ejemplo
# Presiona Ctrl+Z para pausar
[1]+ Detenido python manage.py runserver
Ejecutar temporalmente otros comandos
Restaurar el servidor:
Ejemplo
Escenario 2: Edición de archivos
Ejemplo
# Presiona Ctrl+Z para pausar la edición
# Ver el contenido del archivo
cat related_file.txt
# Volver a la edición
fg
Precauciones
- Asociación con la terminal: El trabajo en segundo plano está asociado con la terminal que lo inició; cerrar la terminal terminará el trabajo
- Interferencia de salida: La salida de un trabajo en segundo plano puede aparecer repentinamente en el primer plano, interfiriendo con el trabajo actual
- Limitaciones de permisos: Algunos programas que requieren interacción con la terminal (como la entrada de contraseñas) no pueden ejecutarse en segundo plano
- Reutilización de números de trabajo: Los números de trabajo son únicos durante la sesión, pero las diferentes sesiones de terminal cuentan de forma independiente
Técnicas avanzadas
Uso combinado con nohup
Hacer que el trabajo se ejecute de forma persistente en segundo plano (incluso si se sale de la terminal):
Ejemplo
# Después se puede reconectar y restaurar
fg %1
Usar disown para desvincular
Ejemplo
jobs -l # Anota el número de trabajo
disown %1 # Desvincula de la terminal
# Ahora puedes cerrar la terminal de forma segura