Processos são instâncias de programas em execução. Saber visualizá-los, filtrá-los e agir sobre eles rapidamente é essencial para manter servidores saudáveis e sessões mais produtivas. Nesta aula, vamos explorar ferramentas de monitoramento (ps
, top
, htop
, pgrep
/pkill
) e criar scripts que automatizam a detecção e o término de processos problemáticos.
2. Comando ps
— Fotografia de Processos
O ps
(“process status”) captura um “instantâneo” dos processos.
2.1. Uso básico
ps
Mostra apenas processos do seu shell atual.
2.2. Opções essenciais
ps aux
a
: todos os usuáriosu
: exibe colunas de usuário, CPU, memória, comandox
: inclui processos sem terminal
ps -eo pid,user,pcpu,pmem,etime,cmd --sort=-pcpu
-e
: todos os processos-o
: formato customizado--sort
: ordena (aqui por uso de CPU decrescente)
- Exemplo para top 10 em memória:
ps -eo pid,user,pmem,cmd --sort=-pmem | head -n 11
3. top
e htop
— Monitoramento em Tempo Real
Ferramentas interativas que atualizam a cada segundo.
3.1. top
- Execute:
top
- Teclas úteis dentro do
top
:M
: ordenar por memóriaP
: ordenar por CPUu
: filtrar por usuáriok
: matar PID (digite o PID e sinal, ex.:9
para SIGKILL)1
: mostra uso de cada núcleo
3.2. htop
- Mais amigável e colorido:
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # RHEL/CentOS
htop
- Navegação:
- Setas ↑/↓ para escolher processo
F3
: busca por nomeF4
: filtroF9
: matar (segue seleção de sinal)F6
: muda critério de ordenação
4. pgrep
e pkill
— Filtragem Baseada em Nome
Ao invés de caçar PID manualmente, use:
pgrep
para listar PIDs de um padrão:
pgrep -u alice sshd # processos sshd do usuário alice
pgrep -fl apache2 # mostra PID e linha de comando
pkill
para terminar processos:
pkill -u bob -SIGTERM python # envia SIGTERM a todos os python de bob
pkill -9 java # envia SIGKILL a todos os java
5. Scripts para Monitorar e Matar Processos Automaticamente
5.1. Script de Alerta de CPU
Crie check_cpu.sh
:
#!/usr/bin/env bash
# Limite em %
LIMIT=80
# Usuário a monitorar
USER="www-data"
for pid in $(pgrep -u $USER); do
cpu=$(ps -p $pid -o %cpu --no-headers | awk '{print int($1)}')
if (( cpu > LIMIT )); then
echo "[$(date '+%F %T')] Processo $pid usa $cpu% de CPU" \
>> /var/log/process_alert.log
fi
done
Uso: chmod +x check_cpu.sh
Agende no cron cada 5 minutos:
*/5 * * * * /path/to/check_cpu.sh
5.2. Script de Kill Automático
Crie auto_kill.sh
:
#!/usr/bin/env bash
THRESHOLD=90
USER="bob"
for pid in $(pgrep -u $USER); do
mem=$(ps -p $pid -o %mem --no-headers | awk '{print int($1)}')
if (( mem > THRESHOLD )); then
echo "Matando $pid que usa $mem% de RAM"
kill -15 $pid
sleep 2
# força se não morrer
kill -0 $pid 2>/dev/null && kill -9 $pid
fi
done
Explicação: envia SIGTERM e, após 2s, SIGKILL se necessário.
Agende no cron a cada minuto:
* * * * * /path/to/auto_kill.sh
6. Exercícios Práticos
- Listar processos: exiba os 5 processos com maior tempo de execução (
etime
) usandops
. - Ordenar no top: inicie o
top
e altere para ordenar por uso de memória e depois por uso de CPU. - Filtrar com pgrep: encontre todos os processos
docker
em execução e exiba PID + comando. - Cron de alerta: instale o script de alerta de CPU e gere relatórios; verifique
/var/log/process_alert.log
. - Aprimorar script: modifique o
auto_kill.sh
para enviar notificação por e-mail antes de matar processos.
7. Dica de Ouro
Monitoramento Contínuo com
watch
Use owatch
para executar comandos em intervalos:
watch -n 2 'ps -eo pid,pcpu,pmem,cmd --sort=-pcpu | head -n 10'
-n 2
: atualiza a cada 2 segundos.
Permite ter uma “visão móvel” dos top consumidores de recursos sem scripts adicionais.