Este es mi entendimiento sobre el uso de &
, disown
y nohup
:
<command>
: Se ejecuta el proceso dentro de la corriente de la Terminalbash
ejemplo, en el primer plano (es decir, el proceso se muestra como unbash
trabajo de primer plano ystdin
,stdout
ystderr
todavía están unidos a la terminal ); no es inmune a los ahorcados ;<command> &
: Se ejecuta el proceso dentro de la corriente de la Terminalbash
ejemplo, en el fondo (es decir, el proceso se muestra como unbash
trabajo en segundo plano ystdin
,stdout
ystderr
todavía están unidos a la terminal ); no es inmune a los ahorcados ;<command> & disown
: Ejecuta el proceso dentro de la corriente del terminalbash
ejemplo, en el fondo , pero el proceso se separa de lasbash
lista de 's puestos de trabajo' (es decir, el proceso no aparece como unabash
tarea en segundo plano / fondo ystdin
,stdout
ystderr
todavía se une al terminal ); inmune a las colgaduras ;nohup <command> & disown
: Ejecuta el proceso dentro de la corriente del terminalbash
ejemplo, en el fondo , pero el proceso se separa de lasbash
lista de 's puestos de trabajo' (es decir, el proceso no aparece como unabash
tarea en segundo plano / fondo ystdin
,stdout
ystderr
son no todavía ligada a la terminal ) ; inmune a las colgaduras ;
Por lo tanto, aparte de nohup <command> & disown
bloquear stdin
y redirigir stdout
y stderr
que nohup.out
por defecto, me parece como que se puede considerar totalmente equivalente a <command> & disown
.
¿Es correcto todo lo anterior? ¿Alguna idea falsa?
bash
instancia principal no matará el procesoRespuestas:
Tu comprensión es básicamente correcta. Ambos
disown
ynohup
se 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
,nohup
ya lo rechazaré por ti.nohup
está definido por POSIX mientrasdisown
que no lo está . Esto significa que mientras muchas conchas (por ejemplobash
,zsh
,ksh
) tienen, otros (por ejemplotcsh
,csh
,dash
ysh
) no tendrán la misma.disown
se puede usar después de que se haya lanzado un comando, mientrasnohup
que 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 disown
yman 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í:
disown -h
ynohup
trabajar efectivamente igual?fuente
Nohup
ydisown
no son lo mismo y usar ambos comandos juntos NO es redundante. Vea esta respuesta para una descripción detalladaSus puntos primero a tercero parecen estar bien, aunque
stdin, stdout and stderr are still bound to the terminal
no es una noción correcta.stdin
siempre 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 terminal
esta bien.Tienes
stdin, stdout and stderr are not still bound to the terminal
en el cuarto punto que no es correcto como se menciona en mi párrafo anterior. También aquí está utilizando/dev/null
como archivo de entrada paracommand
, por ejemplo, si el comando escat
, lo está utilizando comocat /dev/null
.El comando en su 5to punto no se puso correctamente, usted usó
nohup <command> & disown
, mientras que el uso de unonohup
udisown
otro no es necesario. Sus propósitos son los mismos (ignorar elSIGHUP
) pero funcionan de una manera un poco diferente. Entonces el comando se puede simplificar comonohup <command> &
.fuente