nohupe disown -hnão são exatamente a mesma coisa.
Com disown, um processo é removido da lista de trabalhos no shell interativo atual. A execução jobsapós o início de um processo em segundo plano e a execução disownnão mostrará esse processo como um trabalho no shell. Um trabalho renegado não receberá um HUPdo shell quando sair (mas consulte a observação no final).
Com disown -h, o trabalho não é removido da lista de trabalhos, mas o shell não enviaria um HUPsinal se saísse (mas veja a observação no final).
O nohuputilitário ignora o HUPsinal e inicia o utilitário especificado. O utilitário herda a máscara de sinal nohupe, portanto, também ignorará o HUPsinal. Quando o shell termina, o processo permanece como um processo filho de nohup(e nohupé reinserido como pai init).
A diferença é que o processo iniciado com nohupignora, HUPindependentemente de quem envia o sinal. Os processos deserdado não são apenas enviou um HUPsinal pelo shell , mas ainda pode ser enviado o sinal a partir por exemplo kill -s HUP <pid>e não irá ignorar isso.
Observe que HUPsomente é enviado para os trabalhos de um shell se
- o shell é um shell de logon e a
huponexitopção shell está definida ou
- a própria concha recebe um
HUPsinal.
Bits relevantes do bashmanual (minha ênfase):
SINAIS
[...]
O shell sai por padrão após o recebimento de aSIGHUP . Antes de sair, um shell interativo reenvia SIGHUPtodos os trabalhos, em execução ou interrompidos. Os trabalhos interrompidos são enviados SIGCONTpara garantir que eles recebam o
SIGHUP. Para impedir que o shell envie o sinal para um trabalho específico, ele deve ser removido da tabela de trabalhos com o disownbuilt-in (veja SHELL BUILTIN COMMANDSabaixo) ou marcado para não receber o SIGHUP
uso disown -h.
Se a huponexitopção shell tiver sido definida com shopt, bashenvia um
SIGHUPpara todos os trabalhos quando um shell de logon interativo sai.
disown [-ar] [-h] [jobspec ... | pid ... ]
Sem opções, remova cada uma jobspecda tabela de trabalhos ativos. [...] Se a -hopção for dada, cada jobspecum não será removido da tabela, mas será marcado para que SIGHUPnão seja enviado ao trabalho se o shell receber aSIGHUP . [...]
Relacionado:
nohup, precisará redirecionar stdin / stdout / stderr para longe do TTY (caso seu shell original esteja conectado a um). (OTOH, na verdade, considero essa prática melhor do que confiar em um padrão codificado egregado como./nohup.out).