shell-script

No 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:

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

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:
lucas@pc:~$ jobs
[1]-  Executando              ping -q google.com.br &
[2]+  Parado                  nano texto
lucas@pc:~$ 

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:
lucas@pc:~$ 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.

lucas@pc:~$ fg %1
ping -q google.com.br
^Z
[1]+  Parado                  ping -q google.com.br
lucas@pc:~$ 
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:
lucas@pc:~$ jobs
[1]+  Parado                  ping -q google.com.br
[2]-  Parado                  nano texto
lucas@pc:~$ 
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:
lucas@pc:~$ bg %1
[1]+ ping -q google.com.br &
lucas@pc:~$ 

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

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

Leia mais sobre Linux

By Lucas Rodrigues Monteiro

Bacharel em Sistemas da Informação, Certificado MCTS 70-680 / MOS, Trabalho como Administrador de Redes, Firewall e Servidores Windows e Linux! Minhas atividades favoritas são: Caminhar, Fazer Trilhas, Natureza, Insetos e claro ler sobre Tecnologia.

Deixe uma resposta

Translate »