disown
faz com que um shell não envie SIGHUP para seu trabalho rejeitado quando o shell termina e
remove o trabalho rejeitado do controle de trabalho do shell.
O primeiro é o resultado do segundo? Em outras palavras, se um processo iniciado a partir de um shell for removido do controle de tarefas do shell de alguma forma, o shell não enviará SIGHUP para o processo quando o shell terminar?
disown -h
ainda mantém um processo sob o controle de trabalho de um shell. Significa que disown -h
faz com que um processo ainda receba o SIGHUP enviado do shell, mas configura a ação do SIGHUP pelo processo para ser "ignorar"? Isso soa semelhante a nohup
.
$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+ Running sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+ Stopped sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit
$ ps aux | grep sleep
t 26103 0.0 0.0 14584 824 ? S 15:19 0:00 sleep 123
Fazer disown -h
e nohup
trabalhar efetivamente da mesma forma, se desconsiderarmos sua diferença no uso de um terminal?
Obrigado.
nohup
edisown -h
não são exatamente a mesma coisa.Com
disown
, um processo é removido da lista de tarefas no shell interativo atual. A execuçãojobs
após iniciar um processo em segundo plano e a execuçãodisown
não mostrará esse processo como um trabalho no shell. Um trabalho rejeitado não receberá umHUP
do shell quando sair (mas veja a nota no final).Com
disown -h
, o trabalho não é removido da lista de trabalhos, mas o shell não enviaria umHUP
sinal para ele se saísse (mas veja a nota no final).O
nohup
utilitário ignora oHUP
sinal e inicia o utilitário fornecido. O utilitário herda a máscara de sinalnohup
e, portanto, também ignorará oHUP
sinal. Quando o shell termina, o processo permanece como um processo filho denohup
(enohup
é re-pai parainit
).A diferença é que o processo iniciado com
nohup
ignoraHUP
independentemente de quem envia o sinal. Os processos rejeitados simplesmente não recebem um sinalHUP
pelo shell , mas ainda podem receber o sinal de, por exemplokill -s HUP <pid>
, e não irão ignorar isso.Observe que
HUP
só é enviado para os jobs de um shell sehuponexit
opção shell está definida, ouHUP
sinal.Partes relevantes do
bash
manual (grifo meu):Relacionado:
Eles são diferentes:
disown remove o trabalho da tabela de trabalhos ativos. Em seguida, continua com o trabalho atual. Com -h o processo NÃO é enviado SIGHUP. Em vez disso, é deixado para morrer com o shell que o contém, quando recebe um SIGHUP.
nohup ignora o HUP. Então, qualquer coisa que tenha sido passada para o terminal pelo fechamento do processo vai para um arquivo
nohup.out
.