Existem muitos fatores a serem considerados aqui. Por favor, tome esta resposta com um ligeiro ligeiro de sal, pois estou escrevendo todos esses detalhes da memória. (E, por favor, corrijam-me através de edições ou comentários, se você encontrar algum erro.)
Se você usar um comando em segundo plano com &
e, em seguida, o shell pai sair normalmente, o comando background continuará sendo executado.
No entanto, se você estiver executando de forma interativa, o comando "backgrounded" será bloqueado quando tentar ler ou gravar no terminal. (Isso se aplica ou não o shell pai ainda está em execução.) Se stdout, stdin e stderr são redirecionados isso não importa.
Se você contextualizar um comando e, por exemplo, sua sessão SSH está desconectada, você pode esperar que o comando em segundo plano termine. Acredito que isso seja porque seu shell enviará SIGHUP para todos os processos filhos, mas não tenho 100% de certeza sobre os detalhes disso.
Se você renunciar a um trabalho (com o bash builtin disown
) depois do plano de fundo, ele não será finalizado apenas porque, por exemplo, sua sessão SSH é terminada. No entanto, o aspecto de ficar bloqueado ao tentar gravar no terminal ou ler do terminal ainda se aplica (para sessões interativas).
A maneira mais geral que eu conheço para iniciar um sub-script ou processo em segundo plano, de modo que ele não seja afetado, não importa o que aconteça ao shell que o gera (e independentemente de estar sendo iniciado interativamente ou de um script), é:
nohup somecommand >/dev/null 2>&1 </dev/null &
Isso pressupõe que você não se preocupa com QUALQUER saída do comando para o seu padrão ou erro padrão, e não precisa alimentar qualquer entrada padrão.
Se você está feliz com o sub-script para herdar os descritores de arquivo de seu pai (ou seja, o terminal não é um problema ou se você tem outra solução), então tudo que você precisa deve ser:
./some-sub-script &
exit
E apenas um comentário lateral, se você estiver escrevendo um daemon que deve ser deixado em execução, por favor (a) use logs e (b) cuide de rotacionar seus logs de maneira limpa. / p>