Respostas:
Nohup faz com que um programa ignore o sinal HUP, permitindo que ele funcione após o terminal atual ser fechado / o usuário desconectado. Nohup não envia programa para segundo plano.
& no final do comando está relacionado ao controle de tarefas do shell, permitindo que o usuário continue trabalhando na sessão atual do shell.
Geralmente nohup e & são combinados para iniciar o programa que é executado após o logout do usuário e permite continuar o trabalho na atual sessão do shell.
Normalmente, uso &
quando quero executar em segundo plano um comando que não demorará muito para ser executado ou um comando em que realmente não me importo se o programa for encerrado se eu for desconectado inesperadamente de uma sessão.
xcalc &
rdesktop 1.2.3.4 &
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &
Ao trabalhar em uma VPN ou em uma conexão remota desonesta, costumo usar nohup
para executar qualquer coisa que demore um pouco para ser executada. Ao executar grandes importações de dados em um host remoto, por exemplo, convém usar nohup
para garantir que a desconexão não faça com que você comece novamente quando se reconectar.
nohup ./do_data_load.py mydatafile.txt &
Também é usado quando um desenvolvedor não daemon adequadamente um serviço, então você deve usá nohup
-lo para garantir que ele não seja morto quando você se desconectar.
nohup sillyd &
Se você esquecer de usar nohup
ao executar algo como os dois últimos exemplos, poderá usar o bash ou o zsh embutido disown
para o mesmo efeito.
$ sillyd &
[1] 12345 # Whoops!
$ disown %1
É muito raro usar nohup
sem &
, pois você realmente não pode se conectar novamente à sessão sem backup se estiver desconectado. Isso praticamente elimina sua utilidade para comandos interativos. No caso de um comando interativo que você deseja persistir durante as sessões ou evitar desconexões complicadas, você pode usar screen
. O poder de fogo de uma screen
sessão totalmente armada e operacional está além do escopo deste post, portanto, você deve conferir com mais detalhes .
byobu
que adiciona alguns recursos interessantes à tela. Está disponível nos repositórios mais adequados e nos repositórios EPEL da Red Hat.
nohup: desconectar usuário atual, o processo não será interrompido
&: com este símbolo, não haverá saída no terminal atual, o processo é executado em segundo plano