Normalmente, se você colocar algo em segundo plano, ele continuará a ser executado mesmo depois que o shell pai sair. Na verdade, posso criar um caso de teste assim:
/bin/sh -c 'while true; do echo hi; sleep 5; done' &
e, em seguida, sair do shell e usando ps
eu posso ver que ainda está em execução, para sempre, até matá-lo.
Há uma diferença entre redirecionar a saída e não: se você não redirecionar a saída e sair do shell, os descritores de arquivo stdout / stderr serão fechados e, da próxima vez que você tentar gravar nela a operação de gravação vai falhar. Se o script estiver verificando isso ou executando com a opção -e
(exit on error), o script será interrompido. Compare o comportamento do acima com esta versão:
/bin/sh -c 'while true; do echo hi || exit 1; sleep 5; done' &
ou
/bin/sh -ec 'while true; do echo hi; sleep 5; done' &
Se você deixar isso em execução, saia do shell e use ps
para ver que quando ele tenta executar o echo
ele falhará e sairá.
Se você redirecionar a saída para um arquivo, obviamente a gravação não falhará mais e o script continuará a ser executado.