Diferencias entre "<comando> y rechazar" y "nohup <comando> y rechazar"

41

Este es mi entendimiento sobre el uso de &, disowny nohup:

  • <command>: Se ejecuta el proceso dentro de la corriente de la Terminal bashejemplo, en el primer plano (es decir, el proceso se muestra como un bashtrabajo de primer plano y stdin, stdouty stderrtodavía están unidos a la terminal ); no es inmune a los ahorcados ;
  • <command> &: Se ejecuta el proceso dentro de la corriente de la Terminal bashejemplo, en el fondo (es decir, el proceso se muestra como un bashtrabajo en segundo plano y stdin, stdouty stderrtodavía están unidos a la terminal ); no es inmune a los ahorcados ;
  • <command> & disown: Ejecuta el proceso dentro de la corriente del terminal bashejemplo, en el fondo , pero el proceso se separa de las bashlista de 's puestos de trabajo' (es decir, el proceso no aparece como una bashtarea en segundo plano / fondo y stdin, stdouty stderrtodavía se une al terminal ); inmune a las colgaduras ;
  • nohup <command> & disown: Ejecuta el proceso dentro de la corriente del terminal bashejemplo, en el fondo , pero el proceso se separa de las bashlista de 's puestos de trabajo' (es decir, el proceso no aparece como una bashtarea en segundo plano / fondo y stdin, stdouty stderrson no todavía ligada a la terminal ) ; inmune a las colgaduras ;

Por lo tanto, aparte de nohup <command> & disownbloquear stdiny redirigir stdouty stderrque nohup.outpor defecto, me parece como que se puede considerar totalmente equivalente a <command> & disown.

¿Es correcto todo lo anterior? ¿Alguna idea falsa?

kos
fuente
1
¿Qué quiere decir con "inmune a las colgas" y "no inmune a las colgas"?
caos
2
@chaos Quiero decir que terminar / matar la bashinstancia principal no matará el proceso
kos

Respuestas:

32

Tu comprensión es básicamente correcta. Ambos disowny nohupse utilizan para permitirle salir de una sesión de shell en ejecución sin detener los trabajos en ejecución. Algunas aclaraciones:

  • No hay razón para correr nohup command & disown, nohupya lo rechazaré por ti.

  • nohupestá definido por POSIX mientras disown que no lo está . Esto significa que mientras muchas conchas (por ejemplo bash, zsh, ksh) tienen, otros (por ejemplo tcsh, csh, dashy sh) no tendrán la misma.

  • disownse puede usar después de que se haya lanzado un comando, mientras nohupque se debe usar antes.

Por lo que puedo decir, el efecto real de los dos comandos es el mismo. Cada uno tiene características que el otro carece (ver help disowny man nohup) pero su función básica es la misma, sí.

Para una discusión mucho más detallada de estas herramientas y las diferencias entre ellas, eche un vistazo a las respuestas aquí:

terdon
fuente
11
Nohupy disownno son lo mismo y usar ambos comandos juntos NO es redundante. Vea esta respuesta para una descripción detallada
memo
7

Sus puntos primero a tercero parecen estar bien, aunque stdin, stdout and stderr are still bound to the terminalno es una noción correcta. stdinsiempre está vinculado a la terminal en el sentido de que siempre ingresaría el nombre del archivo a un comando a través de la terminal o de las formas que utilizan la terminal. stdout and stderr are still bound to the terminalesta bien.

Tienes stdin, stdout and stderr are not still bound to the terminalen el cuarto punto que no es correcto como se menciona en mi párrafo anterior. También aquí está utilizando /dev/nullcomo archivo de entrada para command, por ejemplo, si el comando es cat, lo está utilizando como cat /dev/null.

El comando en su 5to punto no se puso correctamente, usted usó nohup <command> & disown, mientras que el uso de uno nohupu disownotro no es necesario. Sus propósitos son los mismos (ignorar el SIGHUP) pero funcionan de una manera un poco diferente. Entonces el comando se puede simplificar como nohup <command> &.

heemayl
fuente