Comando bg no Linux (processos em segundo plano) [Guia Básico]

Como sistema operacional multitarefa, o Linux suporta a execução de muitos processos – que nada mais são do que programas em execução. Estes programas podem ser executados conectados ao terminal ou não. Se estão conectados ao terminal, dizemos que ele está em primeiro plano. E se não precisam estar conectados ao terminal para funcionar, dizemos que ele está em execução em segundo plano.

O Comando bg no Linux coloca um processo parado com o sinal SIGSTOP em segundo plano.

O que são Processos em primeiro plano (Foreground)?

Um processo em primeiro plano é qualquer programa que quando executado, ele está diretamente conectado ao terminal. Alguns processos em primeiro plano permitem algum tipo de interface que oferece suporte à interação contínua do usuário, enquanto outros executam uma tarefa e “congelam” o terminal enquanto a tarefa é concluída.

O próprio bash é um processo que está em execução no primeiro plano, esperando por uma interação do usuário ao aguardar e executar comandos.

Quando você executa um comando no bash, um processo filho é criado, e o terminal fica a cargo do processo filho, que detém o terminal até que termine de executar.

No exemplo, quando você digita ls no bash, o comando ls é executado em primeiro plano, e fornece uma lista de arquivos. Ele não devolve o terminal ao bash até que termine de listar os arquivos:

$ ls

Se existirem muitos arquivos no diretório, o ls pode demorar a devolver o prompt de comandos para o usuário.

O que são Processos em segundo plano (Background)?

Um processo em segundo plano é qualquer programa que quando executado, ele não está conectado ao terminal. Ele simplesmente executa, sem nenhuma interação direta com usuário. Este tipo de programa geralmente são daemons (serviços) que o sistema provê, tais como um servidor web, servidor de email, etc.

O símbolo & no Linux

Virtualmente qualquer programa que possa ser executado sem exigir a interação do usuário pode ser executado em segundo plano. Para isso, basta adicionar o sinal de “&” no final do comando.

A saída do comando em segundo plano ainda pode ser descarregada no terminal, mesmo que esse comando esteja executando em segundo plano. 

No exemplo, o ls pode ser executando em segundo plano, mas sua saída ainda vai para o terminal:

$ ls -l &
[1] 14907
[[email protected] etc]$ total 1444
drwxr-xr-x  4 root  root       35 jun 21 18:54 acpi
-rw-r--r--  1 root  root       16 mar  8  2019 adjtime
-rw-r--r--  1 root  root     1518 jun  7  2013 aliases
-rw-r--r--  1 root  root    12288 abr  5 13:44 aliases.db
drwxr-xr-x  2 root  root      261 abr 18 20:16 alternatives
drwxr-xr-x  3 root  root       17 mar  8  2019 amazon
drwxr-xr-x  2 root  root       50 abr 10 11:06 amplify-agen
( ... )

Geralmente os programas que executam em segundo plano são preparados para isso, de modo que não enviam nada para saída padrão (STDOUT). Mas você pode mandar a saída padrão de um comando que não foi preparado para isso com o condutor:

$ ls -l > /tmp/saida &

Controle de Processos

Cada programa que é colocado em execução no shell é tratado como um Job (trabalho), que nada mais é do que um Processo que o shell gerencia.

Cada Job recebe uma ID sequencial. Como um job é um processo, cada job também tem um ID de pocesso (PID) associado. Existem três tipos de status de jobs:

  1. Primeiro plano (foreground): Quando você insere um comando em uma janela do terminal, o comando ocupa a janela do terminal até que seja concluída. Este é um job em primeiro plano.
  2. Segundo plano (background): quando você insere o símbolo & no final de uma linha de comando, o comando é executado sem ocupar a janela do terminal. O prompt do shell é exibido imediatamente depois que você pressiona Enter. Este é um exemplo de um trabalho em segundo plano.
  3. Parado (stoped): se você pressionar Control + Z para um job em primeiro plano ou inserir o comando stop para um job em segundo plano, o job será interrompido. Este job é chamado de job interrompido.

Existem alguns comandos que permitem gerenciar os Jobs no Linux, tais como bg, fg e jobs.

O Comando bg no Linux

Depois que um processo entrou em execução em primeiro plano, isto é, conectado a um terminal, ele pode ser colocado em segundo plano.

Para fazer isso é necessário interromper temporariamente sua execução com o sinal SIGTSTP (20) pressionando as teclas Ctrl-z e acionando logo depois do comando bg.

O comando bg no Linux coloca em segundo plano um processo em execução que foi “congelado” pelo sinal SIGTSTP. Veja no exemplo:

$ find / -name mss > lista_msg.txt
CTRL-z
[1]+ Stopped find / -name mss >lista_msg.txt
$ bg
[1]+ find / -name mss >lista_msg.txt &

Neste exemplo o utilitário find é executado normalmente. Durante a sua execução é enviado o sinal TSTP (ctrl-z) e depois ele é colocado em segundo plano com o comando bg e ganha o número de tarefa 1 pelo controle de tarefas. 

Cada processo que for colocado em execução com o “&” também ganha um número de Job pelo controle de tarefas.

O bg também aceita que número do job – seja passado como parâmetro. Para mandar o processo novamente para o primeiro plano (conectada ao terminal), o comando fg pode ser usado.

E para verificar a lista de processos em segundo plano, o comando jobs pode ser usado.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe