GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la diferencia entre nohup y ampersand?

nohup capta la señal de colgar (ver man 7 signal ) mientras que el ampersand no lo hace (excepto que el shell está configurado de esa manera o no envía SIGHUP en absoluto).

Normalmente, al ejecutar un comando usando & y al salir del shell después, el shell finalizará el subcomando con la señal de colgado (kill -SIGHUP <pid> ). Esto se puede prevenir usando 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 para averiguar si su shell envía SIGHUP a sus procesos secundarios o no. Si está desactivado, los procesos no se terminarán, como parece ser su caso. Puede encontrar más información sobre cómo bash termina las aplicaciones aquí.

Hay casos en los que nohup no funciona, por ejemplo cuando el proceso que inicias vuelve a conectar el SIGHUP señal, como es el caso aquí.


myprocess.out & ejecutaría el proceso en segundo plano usando una subcapa. Si el shell actual finaliza (por ejemplo, al cerrar la sesión), todos los subshells también finalizan, por lo que el proceso en segundo plano también finalizaría. El comando nohup ignora el HUP señal y, por lo tanto, incluso si el shell actual finaliza, el subshell y myprocess.out continuaría ejecutándose en segundo plano. Otra diferencia es que & solo no redirige el stdout/stderr, por lo que si hay algún resultado o error, se muestran en la terminal. nohup, por otro lado, redirige el stdout/stderr a nohup.out o $HOME/nohup.out .


La mayoría de las veces iniciamos sesión en el 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 del shell.

Nohup command name &
eg: nohup sh script.sh &

Nohup capta las señales de HUP. Nohup no pone el trabajo automáticamente en segundo plano. Necesitamos decir eso explícitamente usando &


Linux
  1. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  2. ¿La diferencia en el uso entre las variables de shell y las variables de entorno?

  3. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?

  4. ¿Cuál es la diferencia entre adduser y useradd?

  5. ¿Cuál es la diferencia entre ls y l?

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Cuál es la diferencia entre el comando apt y apt-get?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?

¿Cuál es la diferencia entre ruta y ruta ip?