Na área de trabalho com Bash, devo usar ' & ', nohup, rejeitar, ou alguma combinação dos três para iniciar um processo e executá-lo completamente por conta própria?

Quando executo esses quatro comandos no Xubuntu 16.04, localmente ou por ssh, todos eles parecem fazer exatamente a mesma coisa:

export DISPLAY=:0.0 #not necessary unless you have logged in over ssh instead of starting a terminal locally 
  1. gedit & 
  2. gedit & disown 
  3. nohup gedit 
  4. nohup gedit & disown 

Eu não obter a diferença entre gedit & e gedit & disown porque se eu matar o terminal pai ou sair de uma sessão ssh, parece que gedit é “rejeitado” em ambos os cenários.

Quanto a dois e três, a única diferença que vejo é que a saída do comando é registrada em um arquivo separado e continuará a ser registrada nesse log separado, mesmo que a sessão shell original que gerou o processo de bg é morta.

Quanto a três e quatro, continuo lendo que há uma diferença técnica, mas não consigo entender por que você preferiria um em vez do outro.

Qual devo usar? Eu vi todos os quatro comandos usados em tutoriais e Q & Como, e apesar de algumas respostas realmente ótimas que descrevem as diferenças técnicas entre nohup e rejeitado, não consigo obter uma recomendação clara (exceto, talvez, para fins de registro ou compatibilidade de shell) para qual devo usar.

Comentários

  • Você precisa de & em todos os casos em que deseja continuar no shell (e o programa não se bifurca). Você pode não precisar do nohup para programas que fecham os descritores de arquivo e se desassociam (isso. Gibt é verdadeiro para a maioria dos aplicativos de GUI). Você pode usar o disown após o fato (se você esquecer o nohup) e como escrito antes que os aplicativos GUI não precisem dele.

Resposta

Quando eu precisar executar um script que será executado por muito tempo , e estou uma ssh sessão, eu quero:

  1. A tarefa deve continuar mesmo quando a rede quebra ou quando eu embalo meu laptop e vou embora .

    a. A tarefa pode ser concluída sem minha entrada interativa.

     nohup do_my_stuff & 

    b. A tarefa pode precisar de algo meu no stdin .

     man tmux history -w tmux do_my_stuff 
  2. O processo em segundo plano está de alguma forma melhorando minha sessão atual e deve morrer junto com a sessão. Uma raridade.

     enhance_my_session >>/tmp/enhance.$$.log 2>&1 & 
  3. Quero que a coisa lance alguns logs aleatoriamente na minha sessão SSH. Espere, o quê? Não, eu nunca iria querer isso. Obrigado você disown.

  4. Outra coisa que eu nunca quero: converter o processo para um daemon totalmente desanexado, mas evite iniciá-lo automaticamente na próxima inicialização. Eu nunca iria querer isso, porque não posso prever quando o sistema irá reiniciar e quem irá reiniciá-lo.

Resposta

Normalmente, eu apenas faço o seguinte:

  1. myprog & se eu apenas quiser executar algo em segundo plano de meu shell de login atual. Isso é adequado para mim 99% do tempo …

  2. nohup myprog > /my/path/output.txt & se eu iniciar algo do shell, mas quiser saia depois (talvez enquanto a tarefa em segundo plano ainda estiver em execução).

Resposta

Você deve diferenciar sair do shell de abortar o terminal.

  1. O shell mata todos os trabalhos conhecidos (mas não seus filhos) quando recebe um sinal de aborto.
  2. O terminal mata tudo para o qual era o terminal de controle.

Em geral, a melhor solução (no nível do usuário) IMHO é screen.

Se a sua tarefa for mais relacionada ao sistema do que ao usuário, você pode torná-la um serviço systemd em vez de iniciar manualmente.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *