sábado, 8 de agosto de 2009

Como executar programas em segundo plano

O Linux, como qualquer sistema UNIX, é um sistema operacional multitarefa, isto é, vários processamentos podem ser executados ao mesmo tempo.

Os processamentos que são controlados diretamente pela tela chamam-se processamentos em primeiro plano. Os outros processamentos que foram inicializados, mas que não se possui controle do usuário sobre eles, chamam-se processamentos em segundo plano. Podemos ter um processamento em primeiro plano, porém muitos processamentos em segundo plano podem ser executados simultaneamente.

Um processo é um programa de execução independente que tem seu próprio conjunto de recursos. No Linux, os recursos do sistema, como a memória e os discos, são gerenciados pelo kernel, que é o núcleo do sistema operacional. Tudo mais no sistema é um processo. Quando você se conecta, seu terminal é controlado pelo seu shell, que é um processo em execução. Então, o shell cria um novo processo sempre que você fornecer um comando para ser executado.

O ambiente gráfico X Window facilita a execução de diversos programas ao mesmo tempo, executando-os praticamente em primeiro plano, pois é fácil alternar entre eles com apenas um clique sobre as janelas abertas. Mas no console, o mesmo não dá para ser feito, então você terá que executar os programas em segundo plano, mantendo somente um em primeiro plano. Para isto coloca-se o símbolo & no final dos comandos, como mostrado no exemplo abaixo:

# gcc prog.c &

O prompt do shell retornará e você poderá continuar executando outros comandos enquanto o primeiro está sendo executado. Antes do prompt ser retornado, o shell informa o número do serviço que é atribuído ao comando e o PID do processo, veja um exemplo:

[1] 411

O [1] é o número do serviço e o 411 é o número de identificação do processo (PID).

Se o programa já estiver sendo executado você deverá usar o comando bg, que põe em segundo plano um processo em execução.

Para isso digite Ctrl-Z, assim o processo recebe um sinal SIGSTOP e o shell interrompe a execução do mesmo, e então use o bg para colocar o processo interrompido no modo de execução em segundo plano e o processo poderá continuar sua execução. Veja a sintaxe do comando:

bg [%id]

%id Número do serviço. É necessário ter o sinal de porcentagem antes.

Exemplo:

# bg %1

Imediatamente após o uso das teclas Ctrl-Z o shell exibe o número do serviço junto com outras informações.

Para retornar o processo ao primeiro plano, use o comando fg que transferirá o controle do terminal para o processo. Sua sintaxe é a mesma do comando bg.

Para descobrir o número do serviço atribuído ao processo use o comando jobs. O comando jobs lista os processos que estão parados ou executando em segundo plano pelo shell. Os processos são ordenados pelo número do serviço que é atribuído ao seu comando. Veja a sintaxe:

jobs [-l]

O parâmetro -l faz com que o comando jobs liste também o PID de cada processo.

Em sua saída o comando jobs retorna, além do número do serviço, o estado do processo, a linha digitada no comando e, opcionalmente, o PID.

Então, quando você for executar um comando que irá demorar para ser concluído e que não é necessário acompanhar as mensagens que possam correr pela tela, coloque a execução deste processo em segundo plano, assim você não precisa esperar o término para executar um novo comando. Isto deixará o seu terminal livre para outras tarefas.

Um comentário: