Essa é a resposta correta. Sem nohup, o processo iniciado ainda é considerado um "filho" do processo do terminal e, portanto, finalizado se o terminal estiver fechado.
Izzy
3
cmd & disowntambém funciona, já que o &é tratado como um ;separador de comandos. O comando disown remove a conexão entre a sessão do shell bash e o comando em segundo plano.
Lornix 14/07/2012
2
zsh tem um atalho para isso: cmd &|.
Thor
Para que isso funcionasse, tive que alterar uma preferência no Terminal.app. Em Perfis, selecione o perfil ativo, então Shell> Quando as saídas shell> Fechar se o shell saiu limpa
Antoine
6
Usando screen:
screen -S <session name> -d -m <your command>
Depois disso, você pode sair do terminal, também pode anexá-lo novamente:
Se você deseja executar um comando ou arquivo específico a cada segundo ou mais em segundo plano depois de sair do terminal, pode tentar esta pequena coisa fácil;
"nohup" já está coberto pela resposta aceita. E tenho certeza de que o autor da pergunta mencionou o cron porque o estava usando para dizer "Execute este comando alguns segundos no futuro", para não executá-lo periodicamente.
David Richerby
1
Minha resposta não piora as coisas. Veja o ponto do voto negativo. Neural seria suficiente.
neste caso, quando o terminal está fechado, o processo é iniciado por /home/your/script.sh- como não foi destacado de seu "pai", mas apenas "em segundo plano". Use nohuppara desconectá-lo de verdade.
Izzy
My bad, eu não sabia sobre isso, mas quando eu testei no meu Debian, o comando mantido execução depois de fechar o shell que lançou-lo: /
Flinth
1
Não tenho certeza de onde exatamente o processo em segundo plano está anexado e quando. Mas se você, por exemplo, fizer login em uma máquina remota, ele definitivamente será interrompido assim que você sair (exceto se for daemonizado ). Para ter 100% de certeza, você prefere usar nohup- o que também registra toda a saída (agora invisível) em um arquivo chamado nohup.outlocalizado no diretório em que você iniciou o comando.
Izzy
Ok, bem, obrigado pelas suas explicações ^^
Flinth
Esta resposta pode funcionar bem quando combinada com o jobscomando. Muitas vezes, eu quero poder voltar ao processo de shell após o plano de fundo.
Respostas:
Para evitar que os sinais de saída se propaguem aos processos filhos do terminal e shell, execute o comando com
nohup
, ou seja:fonte
cmd & disown
também funciona, já que o&
é tratado como um;
separador de comandos. O comando disown remove a conexão entre a sessão do shell bash e o comando em segundo plano.cmd &|
.Usando
screen
:Depois disso, você pode sair do terminal, também pode anexá-lo novamente:
Mais informações: referência
fonte
Se você deseja executar um comando ou arquivo específico a cada segundo ou mais em segundo plano depois de sair do terminal, pode tentar esta pequena coisa fácil;
Isso executaria o scipt.sh a cada 5 segundos.
fonte
Coloque um caractere "&" após o seu comando.
por exemplo:
fonte
/home/your/script.sh
- como não foi destacado de seu "pai", mas apenas "em segundo plano". Usenohup
para desconectá-lo de verdade.nohup
- o que também registra toda a saída (agora invisível) em um arquivo chamadonohup.out
localizado no diretório em que você iniciou o comando.jobs
comando. Muitas vezes, eu quero poder voltar ao processo de shell após o plano de fundo.