Gerenciamento de Processos em Segundo Plano no Linux

LinuxBeginner
Pratique Agora

Introdução

O Linux oferece capacidades poderosas para gerenciar múltiplos processos simultaneamente. Uma de suas principais características é a capacidade de executar processos em segundo plano (background), o que permite que você continue usando o terminal para outras tarefas enquanto processos de longa duração são executados.

Neste laboratório, você aprenderá técnicas essenciais para gerenciar processos em segundo plano em sistemas Linux. Essas habilidades são cruciais para a multitarefa eficiente em ambientes de linha de comando e são regularmente usadas por administradores de sistema e desenvolvedores.

Ao final deste laboratório, você entenderá como iniciar processos em segundo plano, monitorar seu status e controlá-los efetivamente. Essas habilidades o ajudarão a fazer um melhor uso dos recursos do sistema e melhorar sua produtividade ao trabalhar com sistemas Linux.

Iniciando um Processo em Segundo Plano

No Linux, você pode executar um comando em segundo plano adicionando um caractere ampersand (&) ao final do seu comando. Isso informa ao shell para executar o processo em segundo plano, permitindo que você continue usando seu terminal enquanto o comando é executado.

Vamos criar e executar um script simples que simula um processo de longa duração.

Primeiro, certifique-se de estar no diretório do projeto:

cd ~/project

Agora, vamos criar um arquivo de script chamado long_running.sh usando o editor de texto nano:

nano ~/project/long_running.sh

Quando o editor nano abrir, insira o seguinte código:

#!/bin/bash
echo "Starting a long process..."
sleep 600
echo "Process completed"

Este script:

  1. Imprime uma mensagem de início
  2. Pausa por 10 minutos (simulando uma tarefa demorada)
  3. Imprime uma mensagem de conclusão

Para salvar o arquivo no nano:

  1. Pressione Ctrl + O para escrever o arquivo
  2. Pressione Enter para confirmar o nome do arquivo
  3. Pressione Ctrl + X para sair do nano

Em seguida, precisamos tornar o script executável:

chmod +x ~/project/long_running.sh

Agora, vamos executar o script em primeiro plano para ver como ele funciona:

./long_running.sh

Você verá:

Starting a long process...

Observe que seu terminal agora está ocupado por 15 segundos até que o script seja concluído. Você não pode inserir novos comandos durante esse tempo.

Agora, vamos executar o mesmo script em segundo plano adicionando um ampersand (&) no final:

./long_running.sh &

Você verá uma saída semelhante a:

[1] 1234
Starting a long process...

A saída mostra:

  • [1] - o número do trabalho atribuído pelo shell
  • 1234 - o ID do processo (PID), que será um número diferente no seu sistema
  • A mensagem de início do script

Embora o script ainda esteja em execução, o prompt do seu shell retorna imediatamente, permitindo que você insira novos comandos. Após 15 segundos, você verá a mensagem de conclusão aparecer:

Process completed
[1]+  Done                    ./long_running.sh

Isso confirma que o processo em segundo plano concluiu sua execução.

Visualizando Processos em Segundo Plano

Depois de iniciar processos em segundo plano, você precisa saber como rastreá-los. O Linux fornece o comando jobs para exibir todos os processos em segundo plano em execução na sua sessão atual do terminal.

Vamos iniciar múltiplos processos em segundo plano e, em seguida, visualizá-los:

## Inicia o primeiro processo em segundo plano
./long_running.sh &

Você verá uma saída semelhante a:

[1] 1234
Starting a long process...

Agora, inicie um segundo processo em segundo plano:

## Inicia o segundo processo em segundo plano
./long_running.sh &

Você verá uma saída semelhante a:

[2] 1235
Starting a long process...

Para ver todos os seus processos em segundo plano (jobs), use o comando jobs:

jobs

Você deve ver uma saída semelhante a:

[1]  Running                 ./long_running.sh &
[2]- Running                 ./long_running.sh &

Isso mostra que você tem dois jobs em segundo plano em execução. Os números entre colchetes são os IDs dos jobs que você pode usar para se referir a jobs específicos com outros comandos.

O comando jobs suporta várias opções úteis:

  • jobs -l - exibe os IDs dos processos junto com as informações dos jobs
  • jobs -p - exibe apenas os IDs dos processos dos jobs

Experimente a opção -l para ver mais detalhes:

jobs -l

A saída incluirá os IDs dos processos:

[1]  1234 Running                 ./long_running.sh &
[2]- 1235 Running                 ./long_running.sh &

Aguarde a conclusão de ambos os processos antes de passar para a próxima etapa. Você verá mensagens como:

Process completed
[1]+  Done                    ./long_running.sh
Process completed
[2]+  Done                    ./long_running.sh

Movendo Processos entre Primeiro Plano e Segundo Plano

O Linux permite que você mova processos entre os estados de primeiro plano e segundo plano. Isso é particularmente útil quando:

  • Você iniciou um processo em primeiro plano e precisa usar o terminal para outra coisa
  • Você deseja trazer um processo em segundo plano para o primeiro plano para interagir com ele

Vamos aprender como fazer isso usando os comandos fg (foreground) e bg (background), juntamente com a suspensão de processos.

Primeiro, inicie nosso script de longa duração em primeiro plano (sem o &):

./long_running.sh

Você verá:

Starting a long process...

Observe que o prompt do seu shell não retorna - o terminal agora está ocupado por este processo em execução em primeiro plano.

Para suspender (pausar) este processo e recuperar o controle do seu terminal:

  1. Pressione Ctrl + Z

Você verá uma saída semelhante a:

^Z
[1]+  Stopped                 ./long_running.sh

O processo agora está suspenso e não está em execução. Você pode confirmar isso com o comando jobs:

jobs

Saída:

[1]+  Stopped                 ./long_running.sh

Para retomar o processo suspenso em segundo plano, use o comando bg:

bg %1

O %1 se refere ao número do job 1. Você verá:

[1]+ ./long_running.sh &

O processo agora está em execução em segundo plano. Confirme com jobs:

jobs

Saída:

[1]+  Running                 ./long_running.sh &

Para trazer um processo em segundo plano para o primeiro plano, use o comando fg:

fg %1

O processo agora será executado em primeiro plano novamente, e seu terminal será ocupado até que ele seja concluído:

./long_running.sh
Process completed

Após a conclusão do processo, o prompt do seu shell retornará.

Mantendo Processos em Execução Após o Fechamento do Terminal

Quando você executa um processo em segundo plano com &, ele será encerrado se você fechar o terminal. Para manter um processo em execução mesmo após o fechamento do terminal, você pode usar o comando nohup.

nohup (abreviação de "no hang up") impede que o processo receba o sinal SIGHUP (hang up), que é enviado aos processos quando o terminal é fechado.

Vamos modificar nosso script para fazê-lo rodar por mais tempo:

nano ~/project/long_running.sh

Atualize o conteúdo para:

#!/bin/bash
echo "Starting a very long process..."
sleep 60
echo "Process completed" > ~/project/completed.txt

Salve e saia do nano (Ctrl+O, Enter, Ctrl+X).

Agora, vamos executar o script com nohup:

nohup ./long_running.sh &

Você verá uma saída semelhante a:

[1] 1234
nohup: ignoring input and appending output to 'nohup.out'

A saída do script não será exibida no terminal. Em vez disso, ela é redirecionada para um arquivo chamado nohup.out. Você pode verificar este arquivo:

cat nohup.out

Você deve ver:

Starting a very long process...

Mesmo que você fechasse seu terminal agora, o processo continuaria em execução. Quando ele for concluído, ele gravará em nohup.out e completed.txt.

Para ver os processos em execução em segundo plano em todos os terminais, use o comando ps:

ps aux | grep long_running.sh

Você verá algo como:

labex     1234  0.0  0.0   8160   736 pts/0    S    12:34   0:00 /bin/bash ./long_running.sh
labex     1235  0.0  0.0  14428  1020 pts/0    S+   12:34   0:00 grep --color=auto long_running.sh

Aguarde a conclusão do processo (ou encerre-o se desejar):

## Se você quiser encerrar o processo:
kill %1

Resumo

Neste laboratório, você aprendeu técnicas essenciais para gerenciar processos em segundo plano no Linux:

  1. Iniciando Processos em Segundo Plano (Background): Você aprendeu como iniciar processos em segundo plano usando o operador &, permitindo que você continue usando seu terminal enquanto o processo é executado.

  2. Visualizando Processos em Segundo Plano: Você usou o comando jobs para visualizar todos os processos em segundo plano em execução na sua sessão atual do terminal.

  3. Movendo Processos entre Primeiro Plano (Foreground) e Segundo Plano (Background): Você praticou o uso de Ctrl+Z para suspender um processo, bg para continuá-lo em segundo plano e fg para trazê-lo para o primeiro plano.

  4. Mantendo Processos em Execução Após o Fechamento do Terminal: Você usou o comando nohup para manter os processos em execução mesmo se a sessão do terminal terminar.

Essas habilidades são essenciais para a multitarefa eficaz em ambientes Linux. Elas permitem que você execute vários processos simultaneamente, faça uso eficiente dos recursos do terminal, mantenha processos de longa duração sem manter os terminais abertos e gerencie os estados de execução dos processos.

Com essas técnicas, você pode trabalhar de forma mais eficiente e eficaz em ambientes de linha de comando Linux, seja gerenciando servidores, desenvolvendo aplicativos ou realizando tarefas de administração do sistema.