Há várias respostas aqui, dependendo do que você deseja (essa resposta é válida em bash
e zsh
shells, outras podem variar).
Se você precisar executar um comando em segundo plano e souber antes de executá-lo, basta adicionar um &
no final do comando (usando sleep 60
, não fazer nada durante 1 minuto, como exemplo de comando):
[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %
Se você já o executou, você pode pará-lo com ctrl - Z , e quando o shell lhe dá um prompt, você pode fazer o background 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á conectado ao seu terminal; Se você fechar o terminal, um sinal de desligamento (HUP) é enviado para o processo --- a maioria dos processos será encerrada normalmente. Se você precisa garantir que o processo continuará, você pode iniciá-lo com:
nohup sleep 60 &
ou, depois de ter enviado para o background com bg
ou com um simples &
, diga ao shell para esquecê-lo, com:
disown %%
( %%
é um atalho controle de tarefas e aqui está o último processo enviado em segundo plano).
Depois, você deve levar em conta a saída do processo - nos dois primeiros casos, a saída ainda chegará ao terminal; no caso de nohup
ele será desviado em um arquivo chamado nohup.out
, e no último caso (com disown
) ele irá para o terminal a menos que você o feche, caso em que o comportamento é bastante indefinido. É uma boa prática cuidar da produção de um processo em segundo plano usando redirecionamento .