Quando devo usar "nohup" e quando devo usar "&"?

16

Nunca sei quando é o melhor momento para usar nohup e o & no final do comando.

Alex
fonte

Respostas:

20

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.

Kristaps
fonte
13

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 nohuppara 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 nohuppara 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 nohupao executar algo como os dois últimos exemplos, poderá usar o bash ou o zsh embutido disownpara o mesmo efeito.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

É muito raro usar nohupsem &, 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 screensessão totalmente armada e operacional está além do escopo deste post, portanto, você deve conferir com mais detalhes .

Cakemox
fonte
Acho o tmux mais fácil de configurar e usar do que a tela. Além disso, BSD licenciado.
Kristaps
11
Você também pode usar o byobuque adiciona alguns recursos interessantes à tela. Está disponível nos repositórios mais adequados e nos repositórios EPEL da Red Hat.
James
0

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

anônimo
fonte
4
ainda haverá saída, pois o & não remove os fluxos de saída e de erro padrão. você tem que usar o redirecionamento de fluxo, como este (em bash) command> / dev / null 2> 1
Kristaps