DIA 06: O Supervisor de Processos

LinuxBeginner
Pratique Agora

Introdução

Bem-vindo, Administrador de Sistemas Júnior! É uma manhã de segunda-feira agitada na "LabEx" e um alerta crítico acaba de chegar: o servidor principal da aplicação está sofrendo uma lentidão significativa, afetando todos os usuários. Os administradores seniores estão presos em uma reunião de emergência, e cabe a você investigar e estabilizar o sistema.

Este é o seu momento de brilhar. Sua missão é mergulhar na linha de comando do servidor, diagnosticar o problema inspecionando os processos em execução, neutralizar quaisquer culpados que estejam consumindo recursos excessivos e garantir que os serviços essenciais permaneçam operacionais. Ao final deste desafio, você terá provado sua capacidade de gerenciar um ambiente Linux real sob pressão, uma habilidade fundamental para qualquer administrador de sistemas.

Aviso Importante
Os próximos desafios podem exceder o escopo do curso Quick Start with Linux.
Se você encontrar dificuldades durante o desafio:
  1. Pule temporariamente o desafio e continue com os Laboratórios Guiados subsequentes na trilha de aprendizado Linux.
  2. Discuta com o Labby ou visualize a solução.

Listando Processos Ativos do Sistema

Seu primeiro passo como Supervisor de Processos é obter uma visão completa do que está sendo executado no servidor no momento. Um instantâneo estático de todos os processos ativos ajudará você a iniciar sua investigação e identificar qualquer coisa incomum.

Tarefas

  • Use um único comando para gerar uma lista detalhada de todos os processos em execução no sistema.

Requisitos

  • O comando deve exibir processos de todos os usuários, não apenas os seus.
  • O formato de saída deve ser orientado ao usuário, mostrando detalhes como o proprietário do processo, uso de CPU/memória e o comando completo que o iniciou.

Exemplos

Após executar o comando, você deverá ver uma saída semelhante a esta:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169848  9064 ?        Ss   08:30   0:02 /sbin/init
labex     1234  0.0  0.0   2324   564 pts/0    S+   08:35   0:00 bash /home/labex/project/resource_hog.sh
labex     1235  0.0  0.0   2324   564 ?        S    08:35   0:00 bash /home/labex/project/critical_service.sh
...

A saída mostrará múltiplos processos com colunas para usuário, ID do processo, uso de CPU, uso de memória e o comando que iniciou cada processo.

Dicas

  • O comando mais comum para esta tarefa é o ps.
  • Pense em quais opções para o comando ps mostrariam processos de todos os usuários (all), em um formato amigável ao usuário (user-friendly), e incluiriam processos não vinculados a um terminal (x).

Monitorando o Uso de Recursos dos Processos

A lista estática do ps foi um bom começo, mas a carga do servidor muda a cada segundo. Você precisa de uma visão dinâmica e em tempo real para ver qual processo está causando ativamente a lentidão. É hora de utilizar uma ferramenta de monitoramento mais poderosa.

Tarefas

  • Inicie um utilitário interativo de linha de comando para monitorar os processos do sistema e o uso de recursos em tempo real.
  • Identifique o nome do script que está consumindo mais CPU.

Requisitos

  • Você deve usar uma ferramenta que forneça uma visão continuamente atualizada e em tempo real dos processos do sistema.
  • A ferramenta deve permitir que você classifique os processos pelo uso de CPU por padrão.
  • Assim que identificar o maior consumidor, saia da ferramenta para prosseguir para a próxima etapa.

Exemplos

Ao iniciar a ferramenta de monitoramento, você verá uma tela interativa que se atualiza automaticamente, mostrando algo como:

top - 09:15:30 up  1:45,  1 user,  load average: 1.50, 1.20, 0.85
Tasks: 105 total,   2 running, 103 sleeping,   0 stopped,   0 zombie
%Cpu(s): 45.0 us,  5.0 sy,  0.0 ni, 50.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   2048.0 total,    850.4 free,    950.2 used,    247.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used,      0.0 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 labex     20   0   12884   1564   1320 R  95.0   0.1   2:15.30 bash /home/labex/project/resource_hog.sh
 1235 labex     20   0   12884   1564   1320 S   0.0   0.1   0:00.00 bash /home/labex/project/critical_service.sh
    1 root      20   0  169848   9064   6868 S   0.0   0.4   0:02.15 systemd
...

A tela exibirá estatísticas do sistema no topo e uma lista de processos classificados pelo uso de CPU, com o processo de maior consumo no topo.

Dicas

  • Este comando popular é frequentemente chamado de "Gerenciador de Tarefas" do mundo Linux.
  • Você pode sair desta ferramenta interativa pressionando a tecla q.

Identificando Processos Chave

Você encontrou o causador do problema: resource_hog.sh. No entanto, um bom administrador de sistemas não encerra processos de forma aleatória. Você também notou o critical_service.sh em execução. Antes de tomar qualquer medida contra o processo invasivo, você deve identificar e entender todos os processos chave em execução no sistema.

Tarefas

  • Encontre o ID do Processo (PID) do script critical_service.sh.
  • Verifique se o serviço crítico está funcionando corretamente.

Requisitos

  • Você deve usar o comando pgrep para encontrar o PID do processo que executa o critical_service.sh.
  • O comando deve localizar com sucesso o processo em execução e exibir seu PID.

Exemplos

Após encontrar o PID com o pgrep, você verá uma saída como:

1235

Este número (1235 neste exemplo) é o ID do Processo do serviço crítico.

Você pode verificar os detalhes do processo usando:

ps -p 1235 -o pid,ppid,cmd

O que deve mostrar uma saída semelhante a:

PID PPID CMD
1235 1 /bin/bash /home/labex/project/critical_service.sh

Dicas

  • O pgrep pode encontrar um PID com base no nome de um processo.
  • Use pgrep -f para realizar a correspondência contra a linha de comando completa.

Encerrando um Processo Problemático

Agora que você identificou os processos chave, é hora de lidar com o resource_hog.sh que está deixando o servidor lento. Você precisa encerrar este processo para restaurar a operação normal.

Tarefas

  • Encerre o processo resource_hog.sh.

Requisitos

  • Você deve usar um comando que possa encerrar um processo com base em seu nome, sem a necessidade de encontrar seu PID primeiro.
  • Use o comando pkill para parar o script resource_hog.sh.

Exemplos

Para verificar se o processo foi encerrado, você pode checar a lista de processos depois. Antes do encerramento, você veria:

labex 1234 95.0 0.0 2324 564 pts/0 R+ 09:15 5:00 bash /home/labex/project/resource_hog.sh

Após o encerramento bem-sucedido, executar o mesmo comando de verificação não deve mostrar processos correspondentes (apenas o próprio comando grep):

labex 2345 0.0 0.0 2324 564 pts/0 S+ 09:20 0:00 grep resource_hog

Dicas

  • O comando pkill envia um sinal de encerramento para processos com base em seus nomes.
  • Após executar o comando, você pode usar ps aux | grep resource_hog para verificar se o processo não está mais em execução.

Iniciando e Gerenciando Processos em Segundo Plano

O servidor está estável novamente! Excelente trabalho. Justo quando você estava prestes a fazer uma pausa, um desenvolvedor lhe envia uma mensagem. Eles precisam que você execute um script de longa duração, o data_processor.sh, no servidor. Você não pode manter sua sessão de terminal aberta por horas apenas para este script. Você precisa executá-lo em segundo plano para que ele continue mesmo depois que você sair do sistema.

Tarefas

  • Inicie o script data_processor.sh de modo que ele seja executado em segundo plano e seja imune a desconexões (ou seja, não pare se você fechar o terminal).

Requisitos

  • Você deve estar no diretório ~/project.
  • Use o comando nohup para executar o script.
  • Use o operador & para enviar o processo para o segundo plano.
  • Redirecione toda a saída (tanto a saída padrão quanto o erro padrão) do script para um arquivo chamado processor.log.

Exemplos

Após iniciar o script com sucesso em segundo plano, você verá uma saída semelhante a:

[1] 3456
nohup: ignoring input and appending output to 'processor.log'

O [1] 3456 indica o número do trabalho (job) e o ID do processo. Você pode verificar se o script está rodando checando o arquivo de log:

cat processor.log

Isso pode mostrar algo como:

Starting data processing at Mon Sep 11 10:30:00 UTC 2025

E você pode confirmar que o processo ainda está ativo:

ps aux | grep data_processor

O que deve mostrar que o processo em segundo plano está em execução.

Dicas

  • O comando nohup significa "no hang up" (não desligar).
  • O símbolo & ao final de um comando diz ao shell para executá-lo como uma tarefa de segundo plano.
  • Você pode redirecionar a saída padrão com > e o erro padrão com 2>&1.

Resumo

Parabéns, Administrador! Você navegou com sucesso por um problema crítico de desempenho do servidor e demonstrou seu domínio no gerenciamento de processos Linux. O servidor está estável, os serviços críticos estão priorizados e as tarefas de longa duração estão operando tranquilamente em segundo plano.

Neste desafio, você provou sua capacidade de:

  • Listar e inspecionar todos os processos em execução usando ps.
  • Monitorar recursos do sistema em tempo real com o top.
  • Identificar processos importantes usando o pgrep.
  • Encerrar processos problemáticos de forma limpa com o pkill.
  • Executar e gerenciar tarefas em segundo plano que persistem após o logout usando nohup e &.

Estas são habilidades fundamentais e de alto valor, essenciais para qualquer função em administração de sistemas, DevOps ou desenvolvimento backend. Você transformou uma crise potencial em uma oportunidade para demonstrar sua expertise. Bom trabalho!

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar