Seu trabalho em segundo plano continua em execução até que alguém diga que ele pare, enviando um sinal. Existem várias maneiras de morrer:
- Quando o terminal desaparece por algum motivo, ele envia um sinal HUP (“hangup”, como no modem hangup ) para o shell executado dentro dele (mais precisamente, para o processo de controle ) e para o processo no grupo de processos em primeiro plano . Um programa em execução em segundo plano não é afetado, mas…
- Quando o shell recebe esse sinal HUP, ele o propaga para os trabalhos em segundo plano. Então, se o processo em segundo plano não estiver ignorando o sinal, ele morrerá neste ponto.
- Se o programa tentar ler ou escrever no terminal depois que ele for embora, a leitura ou gravação falhará com um erro de entrada / saída (EIO). O programa pode então decidir sair.
- Você (ou o administrador do sistema), é claro, pode decidir matar o programa a qualquer momento.
Se sua preocupação é manter o programa em execução, então:
- Se o programa puder interagir com o terminal, use Tela ou Tmux para executar o programa em um terminal virtual que você pode desconectar e reconectar à vontade.
- Se o programa precisar continuar em execução e não for interativo, inicie-o com o comando
nohup
(nohup myprogram --option somearg
), que garante que o shell não enviará um SIGHUP, redirecionará a entrada padrão para/dev/null
e redireciona a saída padrão e o erro padrão para um arquivo chamadonohup.out
. - Se você já iniciou o programa e não quer que ele morra ao fechar o terminal, execute o
disown
integrado, se o seu shell tiver um. Se isso não acontecer, você pode evitar a propagação do SIGHUP pelo shell matando o shell com extremo prejuízo (kill -KILL $$
desse shell, que ignora qualquer trigger de saída que o processo indicado tenha). - Se você já iniciou o programa e gostaria de reconectá-lo a outro terminal, existem maneiras, mas não são 100% confiáveis. Veja Como posso deserdar um processo em execução e associá-lo a um novo shell de tela? e perguntas vinculadas.