
É possível executar uma tarefa ou script iniciado no terminal em segundo plano?
Responder1
Existem várias respostas aqui, dependendo do que você deseja (esta resposta é válida em shells bash
e zsh
shells, outras podem variar).
Se você precisa executar um comando em segundo plano e sabe disso antes de executá-lo, basta adicionar um &
no final do comando (usando sleep 60
, não faça nada durante 1 minuto, como exemplo de comando):
[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %
Se você já o executou, você pode interrompê-lo com ctrl- Ze, quando o shell fornecer um prompt, você poderá colocá-lo em segundo plano com o comando bg
:
1& [romano:~] % sleep 60
^Z
[1] + 9084 suspended sleep 60
1z [romano:~] 20 % bg
[1] + 9084 continued sleep 60
1& [romano:~] %
Em ambos os casos, o processo/trabalho ainda está anexado ao seu terminal; se você fechar seu terminal adesligar(HUP) é enviado ao processo --- a maioria dos processos sairá normalmente. Se precisar garantir que o processo continuará, você pode iniciá-lo com:
nohup sleep 60 &
ou, depois de enviá-lo para segundo plano com bg
ou com um simples &
, diga ao shell para esquecê-lo, com:
disown %%
( %%
é umcontrole de trabalhoatalho, e aqui representa o último processo enviado em segundo plano).
Então você tem que levar em conta a saída do processo --- nos dois primeiros casos a saída ainda chegará ao terminal; no caso dele nohup
será desviado para um arquivo chamado nohup.out
, e no último caso (com disown
) irá para o terminal a menos que você o feche, caso em que o comportamento é bastante indefinido. É uma boa prática cuidar da saída de um processo em segundo plano usandoredirecionamento.
Responder2
adicione &
ao comando.
Exemplo:
$ cp FromA ToB &
Responder3
Este exemplo executará atualizações em segundo plano:
sudo apt-get dist-upgrade -y &
Basta observar o singe &.
Se você quiser ocultar o stdout, faça o seguinte:
sudo apt-get dist-upgrade -y > /dev/null &
Responder4
Se você quiser mais avançado e quiser usar a sessão posteriormente localmente ou por SSH, você pode usar screen.
# screen
# apt-get update -y
Em seguida, pressione CTRL+ Aseguido de D.
Mais tarde você pode reanexar:
# screen -rd