De man nohup
:
Se a entrada padrão for um terminal, redirecione-o de / dev / null. Se a saída padrão for um terminal, acrescente a saída, nohup.out
se possível, $HOME/nohup.out
caso contrário. Se o erro padrão for um terminal, redirecione-o para a saída padrão. Para salvar a saída em FILE, use nohup COMMAND > FILE
.
(completamente revisado com base nos comentários)
Ao sair de um shell ou fechar um terminal, os processos filhos serão enviados ao SIGHUP (hangup, o nome se origina do momento em que os terminais discariam no computador UNIX) para informar que o terminal não está funcionando. mais conectado. Além disso, quando o processo do shell terminar, os fluxos stdin, stdout e stderr do processo filho serão fechados. Normalmente, isso faz com que o processo filho morra. Normalmente, isso é uma coisa boa, pois evita deixar processos em execução sem usuário.
O objetivo do nohup
programa é manter o processo em execução, mesmo após o shell terminar e o terminal desconectar. Como tal, direcionar sua saída para o terminal anula completamente o objetivo. Minha resposta original ( nohup COMMAND | cat
) não foi útil porque: quando o terminal está fechado, a saída do gato é fechada e o gato morre, quebrando o tubo e enviando um SIGPIPE ao processo de nohup, causando a sua morte. Eu respondi a pergunta sem pensar no propósito.
Para atingir seu objetivo, execute nohup COMMAND > FILE
para selecionar o nome do arquivo para o qual direcionar a saída. Em seguida, use tail -f FILE
para assistir a saída em um terminal.
Da mesma forma, pode-se usar a seguinte construção de shell: COMMAND >FILE 2>&1 </dev/null &
para executar um comando cujos fluxos stdio não estão conectados ao terminal e podem continuar em execução após o fechamento do terminal. Além disso, no zsh, execute o shell-builtin disown
para dizer ao zsh para deixar o processo em vez de matá-lo quando o shell terminar.