Por lo general, cuando ejecuta un comando en la terminal, debe esperar hasta que finalice el comando antes de poder ingresar otro. Esto se llama ejecutar el comando en primer plano o proceso en primer plano. Cuando un proceso se ejecuta en primer plano, ocupa su shell y puede interactuar con él utilizando los dispositivos de entrada.
¿Qué sucede si el comando tarda mucho en finalizar y desea ejecutar otros comandos mientras tanto? Tienes varias opciones a tu disposición. La opción más obvia y directa es iniciar una nueva sesión de shell y ejecutar el comando en ella. Otra opción es ejecutar el comando en segundo plano.
Un proceso en segundo plano es un proceso/comando que se inicia desde un terminal y se ejecuta en segundo plano, sin interacción por parte del usuario.
En este artículo, hablaremos sobre los procesos en segundo plano en Linux. Le mostraremos cómo iniciar un comando en segundo plano y cómo mantener el proceso en ejecución después de cerrar la sesión de shell.
Ejecutar un comando de Linux en segundo plano #
Para ejecutar un comando en segundo plano, agregue el símbolo de y comercial (&
) al final del comando:
command &
El ID del trabajo de shell (entre corchetes) y el ID del proceso se imprimirán en el terminal:
[1] 25177
Puede tener varios procesos ejecutándose en segundo plano al mismo tiempo.
El proceso en segundo plano continuará escribiendo mensajes en el terminal desde el que invocó el comando. Para suprimir el stdout
y stderr
los mensajes usan la siguiente sintaxis:
command > /dev/null 2>&1 &
>/dev/null 2>&1
significa redirigir stdout
a /dev/null
y stderr
a stdout
.
Usa los jobs
utilidad para mostrar el estado de todos los trabajos detenidos y en segundo plano en la sesión de shell actual:
jobs -l
El resultado incluye el número de trabajo, el ID del proceso, el estado del trabajo y el comando que inició el trabajo:
[1]+ 25177 Running ping google.com &
Para traer un proceso en segundo plano al primer plano, use el fg
comando:
fg
Si tiene varios trabajos en segundo plano, incluya %
y el ID del trabajo después del comando:
fg %1
Para terminar el proceso en segundo plano, use kill
comando seguido del ID del proceso:
kill -9 25177
Mover un proceso de primer plano a segundo plano #
Para mover un proceso de primer plano en ejecución al segundo plano:
- Detenga el proceso escribiendo
Ctrl+Z
. - Mueva el proceso detenido al fondo escribiendo
bg
.
Mantener los procesos en segundo plano ejecutándose después de que un shell salga #
Si su conexión se interrumpe o cierra la sesión de shell, los procesos en segundo plano finalizan. Hay varias formas de mantener el proceso en ejecución después de que finaliza la sesión de shell interactiva.
Una forma es eliminar el trabajo del control de trabajo del shell usando disown
shell integrado:
disown
Si tiene más de un trabajo en segundo plano, incluya %
y el ID del trabajo después del comando:
disown %1
Confirme que el trabajo se eliminó de la tabla de trabajos activos usando jobs -l
dominio. Para enumerar todos los procesos en ejecución, incluidos los desautorizados, use ps aux
comando.
Otra forma de mantener un proceso en ejecución después de la salida del shell es usar nohup
.
El nohup
El comando ejecuta otro programa especificado como su argumento e ignora todos los SIGHUP
(colgar) señales. SIGHUP
es una señal que se envía a un proceso cuando se cierra su terminal de control.
Para ejecutar un comando en segundo plano usando nohup
comando, escriba:
nohup command &
La salida del comando se redirige a nohup.out
archivo.
nohup: ignoring input and appending output to 'nohup.out'
Si cierra la sesión o cierra la terminal, el proceso no finaliza.
Alternativas #
Hay una serie de programas que le permiten tener múltiples sesiones interactivas al mismo tiempo.
Pantalla #
Screenor GNU Screen es un programa multiplexor de terminal que le permite iniciar una sesión de pantalla y abrir cualquier número de ventanas (terminales virtuales) dentro de esa sesión. Los procesos que se ejecutan en Pantalla continuarán ejecutándose cuando su ventana no esté visible, incluso si se desconecta.
Tmux #
Tmuxis una alternativa moderna a la pantalla GNU. Con Tmux, también puede crear una sesión y abrir varias ventanas dentro de esa sesión. Las sesiones de Tmux son persistentes, lo que significa que los programas que se ejecutan en Tmux continúan ejecutándose incluso si cierra la terminal.
Conclusión #
Para ejecutar un comando en segundo plano, incluya &
al final del comando.
Cuando ejecuta un comando en segundo plano, no tiene que esperar hasta que finalice para poder ejecutar otro.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.