Bash Nohup vs Ampersand
- Ejecute el proceso de Linux en segundo plano
-
el operador de control Ampersand (
&
) -
el comando
nohup
-
Diferencia entre el operador de control
&
y el comandonohup
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.
- Utilice exclusivamente el operador de control ampersand (
&
). - 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
.
-
nohup
puede captar la señal de colgar (SIGHUP
), mientras que&
no. La señalSIGHUP
se utiliza para enviar una señal a los procesos cuando se cierra el terminal desde el que se inicia el proceso. -
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 usandonohup
.El comando
nohup
capta la señalSIGHUP
y no permite que llegue al comando real. Por lo tanto, se restringe la terminación del comando cuando sale el terminal Bash. -
Otra diferencia entre
&
ynohup
es sobre la redirección destdout/stderr
.El operador
&
no redirige elstdout/stderr
automáticamente y muestra la salida de los comandos directamente a la terminal. Sin embargo,nohup
redirigestdout/stderr
en un archivonohup.out
ubicado en$HOME
.