nohupe disown -hnon sono esattamente la stessa cosa.
Con disown, un processo viene rimosso dall'elenco dei lavori nella shell interattiva corrente. L'esecuzione jobsdopo l'avvio di un processo in background e l'esecuzione disownnon mostreranno tale processo come processo nella shell. Un lavoro sconosciuto non riceverà un HUPdalla shell quando esce (ma vedere la nota alla fine).
Con disown -h, il lavoro non viene rimosso dall'elenco dei lavori, ma la shell non invierà un HUPsegnale se uscisse (ma vedere la nota alla fine).
L' nohuputilità ignora il HUPsegnale e avvia l'utilità specificata. L'utilità eredita la maschera del segnale nohupe pertanto ignora anche il HUPsegnale. Quando la shell termina, il processo rimane come processo figlio di nohup(ed nohupè ricomposto init).
La differenza è che il processo iniziato con nohupignora HUPindipendentemente da chi invia il segnale. I processi sconosciuti non vengono semplicemente inviati un HUPsegnale dalla shell , ma possono comunque essere inviati il segnale da ad esempio kill -s HUP <pid>e non lo ignoreranno.
Si noti che HUPviene inviato ai lavori di una shell solo se
- la shell è una shell di login e l'
huponexitopzione shell è impostata, o
- lo stesso guscio riceve un
HUPsegnale.
Bit rilevanti dal bashmanuale (la mia enfasi):
SEGNALI
[...]
La shell esce di default alla ricezione di aSIGHUP . Prima di uscire, una shell interattiva rinvia SIGHUPa tutti i lavori, in esecuzione o arrestati. I lavori interrotti vengono inviati SIGCONTper garantire che ricevano il
SIGHUP. Per impedire alla shell di inviare il segnale a un particolare lavoro, è necessario rimuoverlo dalla tabella dei lavori con disownincorporato (vedere di SHELL BUILTIN COMMANDSseguito) o contrassegnare per non ricevere SIGHUP
utilizzando disown -h.
Se l' huponexitopzione shell è stata impostata con shopt, bashinvia un
SIGHUPa tutti i lavori quando esce una shell di login interattiva.
disown [-ar] [-h] [jobspec ... | pid ... ]
Senza opzioni, rimuoverli tutti jobspecdalla tabella dei lavori attivi. [...] Se -hviene fornita l' opzione, ognuna nonjobspec viene rimossa dalla tabella, ma è contrassegnata in modo tale da SIGHUPnon essere inviata al lavoro se la shell riceve unSIGHUP . [...]
Relazionato:
nohup, è necessario reindirizzare stdin / stdout / stderr lontano dal TTY (se la shell originale deve essere connessa a te). (OTOH, in realtà considero quella pratica migliore che fare affidamento su un default egocentrico hardcoded come./nohup.out).