linux - usar - nohup ubuntu
Cuál es la diferencia entre nohup y ampersand (6)
Corrígeme si estoy equivocado
nohup myprocess.out &
nohup detecta la señal de interrupción, lo que significa que enviará un proceso cuando la terminal se cierre.
myprocess.out &
El proceso puede ejecutarse pero se detendrá una vez que se cierre el terminal.
nohup myprocess.out
Proceso capaz de ejecutar incluso el terminal cerrado, pero puede detener el proceso presionando ctrl
+ z
en el terminal. Crt
+ z
no funciona si &
existe.
Tanto nohup myprocess.out &
myprocess.out &
set myprocess.out para ejecutarse en segundo plano. Después de apagar el terminal, el proceso aún se está ejecutando. ¿Cual es la diferencia entre ellos?
El comando nohup es una utilidad de enmascaramiento de señal y captura la señal de colgado. Donde el ampersand no atrapa las señales de colgar. El shell terminará el subcomando con la señal de colgar al ejecutar un comando usando & y saliendo del shell. Esto se puede prevenir mediante el uso de nohup, ya que capta la señal. El comando Nohup acepta la señal de colgar que el kernel puede enviar a un proceso y bloquearlos. El comando Nohup es útil cuando un usuario desea iniciar la sesión de larga ejecución o cerrar la ventana en la que se inició el proceso. Cualquiera de estas acciones normalmente solicita al kernel que cuelgue en la aplicación, pero un contenedor nohup permitirá que el proceso continúe. El uso del signo & ejecutará el comando en un proceso hijo y este elemento secundario de la sesión bash actual. Cuando salga de la sesión, se eliminarán todos los procesos secundarios de ese proceso. El signo & se relaciona con el control de trabajo para el shell activo. Esto es útil para ejecutar un proceso en una sesión en segundo plano.
El uso del signo & (&) ejecutará el comando en un proceso secundario (secundario a la sesión bash actual). Sin embargo, cuando salga de la sesión, todos los procesos secundarios serán eliminados.
El uso de nohup + ampersand (&) hará lo mismo, excepto que cuando la sesión finalice, el proceso principal del hijo se cambiará a "1", que es el proceso "init", lo que evita que el niño sea asesinado.
La mayoría de las veces nos conectamos al servidor remoto usando ssh. Si inicia un script de shell y cierra la sesión, el proceso se cancela. Nohup ayuda a continuar ejecutando el script en segundo plano incluso después de cerrar la sesión desde el shell.
Nohup command name &
eg: nohup sh script.sh &
Nohup capta las señales HUP. Nohup no pone el trabajo automáticamente en segundo plano. Necesitamos decir eso explícitamente usando &
myprocess.out &
ejecutará el proceso en segundo plano utilizando una subshell. Si el shell actual finaliza (por ejemplo, cierre de sesión), todas las subcapas también se terminan, por lo que el proceso en segundo plano también finalizará. El comando nohup ignora la señal HUP
y, por lo tanto, incluso si el shell actual se termina, la subshell y myprocess.out continuarán ejecutándose en segundo plano. Otra diferencia es que &
alone no redirige el stdout / stderr, por lo que si hay alguna salida o error, estos se muestran en el terminal. nohup, por otro lado, redirige el stdout / stderr a nohup.out o $ HOME / nohup.out.
nohup
capta la señal de colgado (vea la man 7 signal
) mientras que el signo y no (excepto que el shell está configurado de esa manera o no envía SIGHUP
en absoluto).
Normalmente, cuando ejecuta un comando usando &
y luego sale del shell, el shell terminará el subcomando con la señal de kill -SIGHUP <pid>
( kill -SIGHUP <pid>
). Esto se puede evitar utilizando nohup
, ya que capta la señal y la ignora para que nunca llegue a la aplicación real.
En caso de que esté usando bash, puede usar el comando shopt | grep hupon
shopt | grep hupon
para saber si tu caparazón envía SIGHUP a sus procesos secundarios o no. Si está desactivado, los procesos no finalizarán, como parece ser el caso para usted. Puede encontrar más información sobre cómo bash termina las aplicaciones here .
Hay casos en que nohup
no funciona, por ejemplo, cuando el proceso que inicia vuelve a conectar la señal SIGHUP
, como es el caso here .