nohup
y disown -h
no son exactamente lo mismo.
Con disown
, se elimina un proceso de la lista de trabajos en el shell interactivo actual. La ejecución jobs
después de iniciar un proceso en segundo plano y la ejecución disown
no mostrarán ese proceso como un trabajo en el shell. Un trabajo rechazado no recibirá un HUP
mensaje del shell cuando salga (pero vea la nota al final).
Con disown -h
, el trabajo no se elimina de la lista de trabajos, pero el shell no le enviará una HUP
señal si sale (pero vea la nota al final).
La nohup
utilidad ignora la HUP
señal e inicia la utilidad dada. La utilidad hereda la máscara de señal nohup
y, por lo tanto, también ignorará la HUP
señal. Cuando el shell termina, el proceso permanece como un proceso hijo de nohup
(y nohup
se vuelve a criar en init
).
La diferencia es que el proceso comenzó con nohup
ignora HUP
independientemente de quién envía la señal. Los procesos rechazados simplemente no envían una HUP
señal por el shell , pero aún pueden enviar la señal, por ejemplo, kill -s HUP <pid>
y no ignorarán esto.
Tenga en cuenta que HUP
solo se envía a los trabajos de un shell si
- el shell es un shell de inicio de sesión y se establece la
huponexit
opción de shell, o
- el propio shell recibe una
HUP
señal.
Pedazos relevantes del bash
manual (mi énfasis):
SEÑALES
[...]
El shell sale por defecto al recibir aSIGHUP
. Antes de salir, un shell interactivo reenvía SIGHUP
a todos los trabajos, en ejecución o detenidos. Los trabajos detenidos se envían SIGCONT
para garantizar que reciban el
SIGHUP
. Para evitar que el shell envíe la señal a un trabajo en particular, debe eliminarse de la tabla de trabajos con el disown
builtin incorporado (ver más SHELL BUILTIN COMMANDS
abajo) o marcarse para no recibir el SIGHUP
uso disown -h
.
Si la huponexit
opción de shell se ha configurado con shopt
, bash
envía un
SIGHUP
a todos los trabajos cuando sale un shell de inicio de sesión interactivo.
disown [-ar] [-h] [jobspec ... | pid ... ]
Sin opciones, elimine cada uno jobspec
de la tabla de trabajos activos. [...] Si -h
se da la opción, cada jobspec
una no se elimina de la tabla, sino que se marca para que SIGHUP
no se envíe al trabajo si el shell recibe unSIGHUP
. [...]
Relacionado:
nohup
, debe redirigir stdin / stdout / stderr lejos del TTY (si su shell original está conectado a uno) usted mismo. (OTOH, en realidad considero que es una mejor práctica que depender de un valor predeterminado codificado atroz./nohup.out
)