Você provavelmente notou que ao entrar com um
comando no Terminal
, você normalmente tem que esperar comando
terminar antes de o shell
retornar o controle para você. Isso indica
que você mandou executar o comando em primeiro plano.
Entretanto, existem ocasiões e em que esse não é o comportamento
desejado.
Suponha, por exemplo, que você decida copiar
recursivamente um diretório grande para um outro. Você também decidiu
ignorar os erros, então redirecionou a saída de erros para
/dev/null
:
cp -R images/ /shared/ 2>/dev/null
Um comando como esse pode demorar vários minutos até terminar de ser executado. Você então tem duas soluções: a primeira é violenta, e implica em parar (matar) o comando e reexecutá-lo quando tiver tempo. Para fazer isso, pressione as teclas Ctrl-C: isso irá terminar o processo e levá-lo de volta ao prompt. Mas espere, não faça-o ainda! Leia mais um pouco.
Suponha que você quer que o comando continue executando enquanto faz alguma outra coisa. A solução então é colocá-lo para executar em segundo plano. Para fazer isso, pressione as teclas Ctrl-Z para suspender o processo:
$ cp -R images/ /shared/ 2>/dev/null # Type C-z here [1]+ Stopped cp -R images/ /shared/ 2>/dev/null $
e novamente você é levado ao prompt. O processo
está parado, esperando que seja reiniciado (como mostrado pela palavra-chave
Stopped
). Isso é exatamente o que deseja fazer, porém, é
claro, em segundo plano. Digite o comando bg (de
Segundo Plano - BackGround) para executar o processo em
segundo plano:
$ bg [1]+ cp -R images/ /shared/ 2>/dev/null & $
O processo então irá começar a executar em
segundo plano, como indicado pelo caractere &
(e comercial) ao final da linha. Você então será levado novamente ao prompt
e poderá continuar trabalhando. Um processo que executa como tarefa de
segundo planou, ou em segundo plano, é chamado de job ou trabalho de
segundo plano.
É claro, você pode iniciar processos diretamente como tarefas de segundo plano, simplesmente adicionando um caractere & ao final da linha de comando. Por exemplo, você pode iniciar um comando para copiar um diretório em segundo plano simplesmente digitando:
$ cp -R images/ /shared/ 2>/dev/null &
Se você quiser, também pode restaurar esse processo para primeiro plano e esperar ele terminar, utilizando o comando fg (Primeiro Plano - ForeGround). Para colocá-lo em segundo plano novamente, digite as teclas Ctrl-Z, bg.
Você pode iniciar vários processos dessa
maneira: cada comando terá um número de trabalho (job). O comando do
shell
jobs lista todos os trabalhos associados com o shell
corrente. O trabalho precedido de um caractere +
indica
o último processo que foi iniciado como tarefa de segundo plano. Para
restaurar um trabalho particular no primeiro plano, você pode digitar fg
<n> onde <n>
é o número do trabalho
ou job, i.e. fg 5.
Observe que você também pode suspender ou iniciar aplicações de tela cheia desta maneira, como o comando less ou um editor de texto como o Vi, e restaurá-los no primeiro plano se desejar.