PRIMEIRO E SEGUNDO PLANO NO SHELL DO LINUX (JOBS, FG E BG)

A mágica do GNU/Linux muitas vezes acontece sem que você tenha sequer uma interface gráfica para uso amigável, porém, o shell (ou o terminal) também tem suas malícias para agilizar o seu trabalho.

Você pode trabalhar com várias aplicações ao mesmo tempo sem ter que terminar o que estava fazendo para iniciar uma nova tarefa, isso graças aos comandos “jobs”, “fg” e “bg”. “Jobs” significa “Trabalhos” e serve para exibir tudo o que você está fazendo no shell do GNU/Linux mas que está em segundo plano. Claro, você precisa mandar as tarefas para segundo plano para poder utilizar o comando “jobs”.

“fg” (foreground) serve para trazer as tarefas que estão em segundo plano para o primeiro plano, assim você pode continuar fazendo o que estava fazendo anteriormente.

Já a última opção, “bg” (background) serve para continuar executando tarefas em segundo plano, para que o shell fique livre e você possa executar outras tarefas sem interromper a tarefa anterior.

Vamos ver alguns exemplos práticos para que você entenda melhor.

ENVIANDO UM COMANDO PARA SEGUNDO PLANO

Existem várias maneiras para enviar um comando para segundo plano, porém, a mais simples é colocando um & (E comercial) ao final do comando. Por exemplo:

find / -iname *.mp3 >> musicas.txt &

Você verá algo parecido com o trecho abaixo:

luizotavio@luizotaviopc:~$ find / -iname *.mp3 >> musicas.txt &
[1] 7193
luizotavio@luizotaviopc:~$ 

Aquele [1] significa que essa é a tarefa %1 que está sendo executada em segundo plano. O Número na frente é o PID do processo.

Outra maneira para enviar processos para segundo plano é pressionando “CTRL” + “Z” para que a tarefa seja parada momentaneamente. Em seguida, digite “bg”. Assim a tarefa será continuada, porém em segundo plano.

MANIPULANDO VÁRIAS TAREFAS EM SEGUNDO PLANO

Também é possível enviar várias tarefas para segundo plano e trazer a que você desejar para o primeiro plano quando quiser. Vamos enviar duas tarefas para segundo plano e ver o que ocorre.

ping -q google.com.br &
nano texto &

A primeira está enviando um ping para o IP do Google, já a segundo abre um arquivo de texto chamado “texto” para que você possa digitar alguma coisa.

Neste momento, se você digitar “jobs”, verá o seguinte:

luizotavio@luizotaviopc:~$ jobs
[1]-  Executando              ping -q google.com.br &
[2]+  Parado                  nano texto
luizotavio@luizotaviopc:~$ 

Perceba que existem dois processos, um parado e outro executando. Isso ocorre porque alguns comandos (como o nano) não continuam a ser executados quando estão em background, e faz sentido, pois não a nada que o nano possa fazer quando você não está olhando para a tela. Perceba também que existe um sinal de – e + na frente do número do processo, isso simplesmente indica que o processo com sinal de + foi iniciado por último e ele será trazido para o primeiro plano caso você digite apenas “fg”. O processo com um sinal de menos apenas indica que ele foi iniciado antes do processo com sinal de +. Se você iniciar mais tarefas, a próxima terá um sinal de +, a que estava com sinal de + ficará com um sinal de – e a primeira tarefa iniciada não terá nenhum sinal.

Se você quiser trazer uma tarefa para primeiro plano, digite fg %N (onde N é o número do processo que deseja). Veja um exemplo, vou trazer o “ping” para primeiro plano:

luizotavio@luizotaviopc:~$ fg %1
ping -q google.com.br

Perceba que agora fiquei “preso” ao ping, pois, não tenho mais como digitar comandos. Para resolver isso, você pode parar temporariamente a aplicação pressionando as teclas “CTRL” + “Z” do seu teclado.

luizotavio@luizotaviopc:~$ fg %1
ping -q google.com.br
^Z
[1]+  Parado                  ping -q google.com.br
luizotavio@luizotaviopc:~$ 

E o shell está livre para que eu possa digitar novamente. O problema é que se você digitar “jobs” novamente, verá que a tarefa não está executando:

luizotavio@luizotaviopc:~$ jobs
[1]+  Parado                  ping -q google.com.br
[2]-  Parado                  nano texto
luizotavio@luizotaviopc:~$ 

Perceba que o status do “ping” mudou de “Executando” para “Parado”. Para solucionar, simplesmente utilize o comando “bg” para continuar executando a tarefa em segundo plano. Veja:

luizotavio@luizotaviopc:~$ bg %1
[1]+ ping -q google.com.br &
luizotavio@luizotaviopc:~$ 

Agora o shell continuar livre e se você analisar os “jobs” verá que o ping também está executando:

luizotavio@luizotaviopc:~$ jobs
[1]-  Executando              ping -q google.com.br &
[2]+  Parado                  nano texto
luizotavio@luizotaviopc:~$ 

Vamos à algumas dicas finais.

DICAS FINAIS SOBRE TAREFAS DE PRIMEIRO E SEGUNDO PLANO NO LINUX

Apesar de ser uma excelente função, trabalhar com tarefas em primeiro (fg) e segundo (bg) plano no Linux tem lá suas falhas, por exemplo, você vai se deparar com saídas de alguns comandos na tela, elas simplesmente aparecem do nada, principalmente os erros.

Isso acontece porque o shell não teria como lhe avisar caso acontecesse um erro em uma tarefa que estava sendo executada em segundo plano. Mas não se preocupe, nada do que é mostrado na tela atrapalha o seu serviço atual, se você estiver digitando um texto no nano, por exemplo, simplesmente pressione “CTRL” + “L” para limpar a tela e continue com seu serviço normalmente.

Só tome cuidado com comandos que cospem texto na tela do tempo todo, se eles estiverem em “bg” e mostrando textos na sua tela de “fg”, você terá que trazê-los para o primeiro plano novamente e depois encerrá-los.

Observação: Tarefas em segundo plano não respondem aos seus comandos.

Espero ter ajudado.

Rolar para cima