Bash Nohup vs Ampersand

Dr. Muhammad Abdullah 20 junio 2023
  1. Ejecute el proceso de Linux en segundo plano
  2. el operador de control Ampersand (&)
  3. el comando nohup
  4. Diferencia entre el operador de control & y el comando nohup
Bash Nohup vs Ampersand

Este breve artículo explica el comando nohup y el operador de control & para ejecutar procesos de Linux en segundo plano a través de Bash. Además, profundizaremos en las principales diferencias entre nohup y &.

Ejecute el proceso de Linux en segundo plano

Linux proporciona dos métodos para ejecutar procesos o comandos en segundo plano.

  1. Utilice exclusivamente el operador de control ampersand (&).
  2. Utilice el comando nohup junto con &.

el operador de control Ampersand (&)

Podemos ejecutar cualquier comando de forma asíncrona en segundo plano usando el operador de control &.

Considere el siguiente comando.

sleep 10

El comando sleep añade un retraso de un tiempo específico. Cuando ejecutamos el comando sleep 10, suspende la terminal Bash durante 10 segundos y no podemos ejecutar ningún otro comando en la terminal.

Ahora, considere el siguiente comando.

sleep 10 &

El comando anterior muestra la identificación del proceso (PID), y sleep 10 se ejecuta de forma asíncrona en segundo plano. El control de ejecución vuelve a la terminal de mando sin esperar a que finalice el sleep.

Ahora, podemos ejecutar cualquier otro comando en el mismo terminal al mismo tiempo que el comando de fondo sleep.

Podemos mover un proceso en segundo plano al primer plano usando el siguiente comando.

fg

el comando nohup

El comando nohup ejecuta cualquier otro comando o proceso. Significa “sin colgar”, lo que evita que el proceso asociado reciba la señal SIGHUP.

Si desea ejecutar un comando incluso después de cerrar la terminal, puede usar nohup CommandName.

Sin embargo, si queremos ejecutar un comando en segundo plano con el control de ejecución devuelto inmediatamente a la terminal, debemos usar el siguiente comando.

nohup sleep 10 &

El comando anterior ejecuta el comando sleep 10 en segundo plano y devuelve el control inmediatamente para que podamos ejecutar cualquier otro comando en el mismo terminal.

Podemos verificar los comandos que se ejecutan en segundo plano usando el comando pgrep de la siguiente manera:

pgrep -a [Command]

El comando pgrep busca el Comando y muestra la identificación del proceso (PID) junto con los detalles del comando en ejecución.

Por ejemplo, pgrep -a sleep mostrará el proceso en segundo plano relevante como:

PID sleep 10

Aquí, PID representa la identificación del proceso asignada al comando sleep.

Diferencia entre el operador de control & y el comando nohup

Las siguientes son algunas diferencias entre ejecutar un comando o proceso en segundo plano usando & y nohup.

  1. nohup puede captar la señal de colgar (SIGHUP), mientras que & no. La señal SIGHUP se utiliza para enviar una señal a los procesos cuando se cierra el terminal desde el que se inicia el proceso.

  2. Por lo general, un proceso o comando se ejecuta en segundo plano usando & hasta que existe el shell desde el cual se inicia este comando o proceso. Una vez que se termina el shell, también se terminan todos los comandos o procesos asociados que se ejecutan en segundo plano usando &.

    Cuando una terminal sale, una señal de colgar usando SIGHUP (kill SIGHUP <pid>) finaliza todos los subcomandos o procesos secundarios de esa terminal. Sin embargo, esto se puede prevenir usando nohup.

    El comando nohup capta la señal SIGHUP y no permite que llegue al comando real. Por lo tanto, se restringe la terminación del comando cuando sale el terminal Bash.

  3. Otra diferencia entre & y nohup es sobre la redirección de stdout/stderr.

    El operador & no redirige el stdout/stderr automáticamente y muestra la salida de los comandos directamente a la terminal. Sin embargo, nohup redirige stdout/stderr en un archivo nohup.out ubicado en $HOME.