Acabei de mudar de bash para zsh.
No bash, as tarefas em segundo plano continuam em execução quando o shell é encerrado. Por exemplo aqui, dolphin
continua a correr após exit
:
$ dolphin .
^Z
[1]+ Stopped dolphin .
$ bg
[1]+ dolphin . &
$ exit
É isso que desejo como comportamento padrão.
Em contraste, o comportamento de zsh é alertar sobre a execução de jobs e exit
, em seguida, fechá-los se você fizer isso exit
novamente. Por exemplo, aqui, dolphin
é fechado quando o segundo exit
-comando realmente sai do shell:
% dolphin .
^Z
zsh: suspended dolphin .
% bg
[1] + continued dolphin .
% exit
zsh: you have running jobs.
% exit
Como faço o comportamento padrão do zsh aqui como o do bash?
setopt nohup
no seu~/.zshrc
. Então, iniciar um comando em segundo plano com&
também sempre o rejeitará. Embora, por padrão, o zsh ainda irá lembrá-lo de que há trabalhos em execução quando tentar sair. Você também pode desligar isso comsetopt nocheckjobs
.setopt nocheckjobs
que faz o que eu quero. Agora encontrei as opções disponíveis emman zshoptions
. Eu gostaria de desligar o aviso. Eu sei quando tenho processos em segundo plano e não preciso deles. Eu gostaria que fechasse os processos em segundo plano, a menos que eu os iniciasse comnohup
. Atualmente, eu uso isso com uma função shell que executa o PyCharm em segundo plano comnohup
. Quando eu digito,pycharm .
ele é executadonohup charm $@ &
. Ele não fecha quando eu fecho o terminal, mas ainda recebo esse aviso e preciso digitarexit
duas vezes.Da documentação zsh :
Portanto, basta definir a
NO_HUP
opção:% setopt NO_HUP
fonte
Descobri que usar uma combinação de
nohup
,&
edisown
funciona para mim, pois não quero que os jobs sejam executados permanentemente quando o shell for encerrado.nohup <command> & disown
Embora
&
tenha funcionado para mim embash
, descobri que, ao usar apenasnohup
,&
oudisown
em comandos em execução, como um script que chama um comando java run, o processo ainda pararia quando o shell fosse encerrado.nohup
faz com que o comando ignoreNOHUP
eSIGHUP
sinais do shell&
faz com que o processo seja executado em segundo plano em um subterminaldisown
seguido por um argumento (o índice do número do trabalho em sua lista de trabalhos) evita que o shell envie umSIGHUP
sinal para processos filho. Usardisown
sem um argumento faz com que ele volte para o trabalho mais recente.Encontrei as informações
nohup
e nesta página , e as informações nesta resposta SO .disown
&
fonte
Eu normalmente uso
screen
para manter a execução de trabalhos em segundo plano.1) Crie uma sessão de tela:
2) Lance seus scripts, serviços, daemons ou qualquer outra coisa
3) Sair (desanexar) da sessão de tela com
ou atalho
ALT+A then d
Depois de algumas centenas de anos - se você quiser retomar sua sessão (reconectar):
Se você quiser saber se existe uma sessão de tela, seu nome e seu status (anexado ou desanexado):
Esta solução funciona em todos os interpretadores de terminal como bash, zsh etc. Veja também
man screen
fonte