Vamos considerar que você abriu um editor de texto gedit
de um terminal e está trabalhando nele. Se você fechar o terminal antes de fechar gedit
, o gedit também será fechado assim que fechar o terminal. Então, o que está acontecendo aqui? O gedit
é executado como um processo filho sob o terminal. Quando você fecha o terminal, um sinal de desligamento ( SIGHUP
) é enviado para o processo que mata o processo filho.
Por outro lado, se você quiser que seu processo filho (aqui gedit
) continue em execução mesmo depois de fechar o terminal pai, você desejaria que seu processo fosse imune ao sinal de desligamento. Então, fechar o terminal não fecha o processo filho. nohup
faz exatamente esse trabalho.
nohup
não desconecta um comando do terminal , ele faz seu script ignorar SIGHUP e redireciona stdout / stderr para um arquivo nohup.out, para que o comando possa continuar sendo executado em segundo plano após o logout. Se você fechar o shell / terminal ou efetuar logoff, seu comando não será mais um filho desse shell. Pertence ao processo init. Se você pesquisar em 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.