Vamos considerar que você abriu um gedit
editor de texto em um terminal e está trabalhando nele. Se você fechar o terminal antes de fechar gedit
, o gedit também será fechado assim que o fechar. Então, o que está acontecendo aqui? É gedit
executado como um processo filho sob o terminal. Quando você fecha o terminal, um sinal de desligamento (SIGHUP
) é enviado ao processo que interrompe o processo filho.
Por outro lado, se você deseja que seu processo filho (aqui gedit
) continue em execução mesmo após o fechamento do terminal pai, você deseja que seu processo seja imune ao sinal de interrupção. Para que o fechamento do terminal não feche o processo filho. nohup
faz exatamente esse trabalho.
nohup
não desconecta um comando do terminal , faz com que seu script ignore o SIGHUP e redireciona stdout / stderr para um arquivo nohup.out, para que o comando possa continuar em execução em segundo plano após o logout. Se você fechar o shell / terminal ou efetuar logoff, seu comando não será mais filho desse shell. Pertence ao processo init. Se você pesquisar, pstree
verá que agora pertence ao processo 1 (init). Isso não pode ser trazido de volta ao primeiro plano porque o primeiro plano não existe mais.
disown
é uma alternativa melhor paranohup
. Coloque um plano de fundo em um comando comcommand &
ouCtrl-Z
e use-odisown
para desanexá-lo do shell.