Cómo Ejecutar Comandos Bash en Segundo Plano en Linux

Función de Comandos en Segundo Plano

No hay nada más molesto que ejecutar un comando en tu terminal y que se ejecute durante minutos, a veces horas, y no poder usar tu terminal nuevamente. Claro, puedes usar pestañas, pero esa es una solución torpe, y no siempre es óptima porque puede que quieras ver actualizaciones mientras trabajas. Aquí te mostramos algunas formas diferentes de ejecutar comandos bash en segundo plano en Linux.

También lee: Cómo Usar el Comando lsof en Linux para Listar Archivos Abiertos

Terminar un Comando con &

Si deseas enviar un comando al segundo plano, usar & al final es una forma fácil de hacerlo. De esta manera, puedes emitir un comando en segundo plano y continuar usando tu terminal mientras se ejecuta. Sin embargo, viene con una trampa. Usar & no desconecta el comando de ti; simplemente lo empuja al segundo plano. Esto significa que mientras intentas usar la terminal, cualquier cosa que el comando quiera enviar a STDOUT o STDERR seguirá imprimiéndose, lo que puede ser distractor.

Captura de Pantalla Desde 2021 01 14 16 21 23

COMMAND &

Cuando la sesión de terminal se cierra, el comando termina. También puedes matar el comando emitiendo el comando jobs, encontrando el número del comando que se está ejecutando y matándolo con el comando kill. Esa sintaxis es la siguiente:

Captura de Pantalla Desde 2021 01 14 16 21 48

kill%1

Usar & es bueno si necesitas dejar algo por un tiempo, pero no esperes que continúe para siempre.

También lee: Cómo Usar el Comando dd en Linux

& Después de un Comando, Luego Desasociarlo

Ejecutar un comando solo con & lo empuja hacia atrás y lo mantiene en ejecución mientras la ventana de terminal esté abierta. Sin embargo, si buscas mantener este comando en ejecución de forma constante, incluso con tu sesión de terminal finalizando, puedes usar el comando disown.

Para usar este método, comienza agregando un &.

COMMAND &

Como se mencionó anteriormente, usar & empuja este comando al segundo plano pero no lo separa de tu usuario. Puedes verificar esto escribiendo jobs en la terminal. Mostrará el comando ejecutándose en segundo plano como vimos antes.

Simplemente escribe disown en el shell, y hará exactamente eso. (Y puedes verificar esto nuevamente con el comando jobs.)

Captura de Pantalla Desde 2021 01 14 16 26 01

Ahora puedes cerrar tu terminal y continuar con tu día. Seguirá enviando cosas a STDOUT o STDERR, pero una vez que salgas y vuelvas a abrir tu terminal, no verás nada allí. Puedes encontrar el comando nuevamente con los comandos top o ps y matarlo con el comando kill.

Captura de Pantalla Desde 2021 01 14 16 28 42

También lee: Cómo Usar el Comando Rm en Linux

& Después de un Comando con /dev/null

Agregar & después de un comando enviará un comando al segundo plano, pero como resultado, el comando en segundo plano seguirá imprimiendo mensajes en la terminal mientras lo usas. Si buscas prevenir esto, considera redirigir el comando a /dev/null.

Captura de Pantalla Desde 2021 01 14 16 31 33

COMMAND &>/dev/null &

Esto no previene que el comando se cierre cuando la terminal se cierra. Sin embargo, como se mencionó anteriormente, es posible usar disown para desasociar el comando en ejecución del usuario. También puedes matarlo en cualquiera de los métodos mencionados anteriormente si no deseas que se ejecute más.

También lee: La Guía Definitiva para los Comandos Apt y Apt-Get

Nohup, con & y /dev/null

A diferencia de los comandos anteriores, usar nohup te permite ejecutar un comando en segundo plano y mantenerlo en ejecución. ¿Cómo? nohup evita la señal HUP (señal de colgar), haciendo posible ejecutar comandos en segundo plano incluso cuando la terminal está apagada. Combina este comando con la redirección a “/dev/null” (para evitar que nohup cree un archivo nohup.out), y todo va al segundo plano con un solo comando.

nohup COMMAND &>/dev/null &

Captura de Pantalla Desde 2021 01 14 16 32 43

También lee: Cómo Generar Certificados SSL en Linux Usando OpenSSL

La mayoría de los programas de terminal en Linux hoy en día tienen características integradas que les permiten ejecutarse en segundo plano con poco esfuerzo. Además, los sistemas de inicio modernos (como systemd) pueden permitir a los usuarios iniciar programas como servicios al arrancar o cuando sea necesario.

Aún así, algunos programas en Linux carecen de la capacidad de ejecutarse como un demonio o integrarse con sistemas de inicio modernos. Esto es una verdadera inconveniencia, pero es comprensible, ya que no todos los desarrolladores tienen la habilidad o el tiempo para agregar nuevas características.

Afortunadamente, comandos como nohup o disown siguen siendo una realidad y pueden cerrar la brecha para mover programas como este al segundo plano. No son perfectos ni elegantes, pero hacen el trabajo cuando es necesario.

Si disfrutaste este artículo de Linux, asegúrate de revisar algunos de nuestros otros contenidos de Linux, como cómo conectar tu cuenta de Google a GNOME Shell, las mejores distribuciones de Linux para usuarios de Windows, y los comandos LS que necesitas conocer.

También lee: Cómo Usar cURL para Transferencia de Datos en Línea de Comandos y Más