Processos e serviços
Esta aula aborda o gerenciamento de processos em sistemas Linux, com foco no systemd como sistema de init e gerenciador de serviços. Você aprenderá a visualizar e controlar processos, gerenciar serviços e unidades, analisar logs do sistema e realizar monitoramento básico de recursos.
Em sistemas operacionais Unix-like, processos são a base de toda a execução. Cada programa em execução é um processo, e gerenciá-los é essencial para manter a estabilidade e o desempenho do sistema. Nesta aula, vamos explorar ferramentas e conceitos fundamentais para administrar processos e serviços, com destaque para o systemd, hoje padrão na maioria das distribuições Linux.
Além de entender como processos são criados e encerrados, você aprenderá a utilizar comandos como ps, top, kill e systemctl para controlar o que roda no sistema. Também veremos como consultar logs com journalctl e monitorar recursos com htop e vmstat.
Gerenciamento de processos
Um processo é uma instância de um programa em execução, com seu próprio espaço de endereçamento, estado e recursos associados. O kernel do Linux gerencia a criação, escalonamento e término dos processos. Cada processo possui um PID (Process ID) único e pode ser executado em foreground ou background.
Para listar processos, usamos o comando ps. Com opções como aux (BSD) ou -ef (POSIX), obtemos uma visão detalhada de todos os processos do sistema. O comando top oferece uma visão dinâmica e atualizada dos processos mais ativos, ordenados por uso de CPU. Para encerrar um processo, utilizamos kill com o sinal adequado (ex.: SIGTERM, SIGKILL).
Exemplo prático: visualizar processos de um usuário específico.
# Listar processos do usuário "aluno"
ps -u aluno
Também é possível enviar um processo para background com & ou suspendê-lo com Ctrl+Z e retomá-lo com fg ou bg. O comando jobs lista os jobs da sessão atual.
systemd (visão geral)
systemd é o sistema de init e gerenciador de serviços adotado pela maioria das distribuições Linux modernas. Ele substitui o antigo SysV init e oferece inicialização paralela, dependências entre serviços, e gerenciamento unificado de processos, logs e dispositivos.
As unidades do systemd são arquivos de configuração que descrevem serviços, sockets, montagens, etc. O comando principal é systemctl, que permite iniciar, parar, reiniciar, habilitar e desabilitar serviços. Exemplo de gerenciamento do serviço SSH:
# Verificar status do serviço ssh
systemctl status ssh
# Iniciar o serviço
systemctl start ssh
# Habilitar na inicialização
systemctl enable ssh
Além de serviços, systemd gerencia timers (substitutos do cron), targets (níveis de execução), e muito mais. A análise de dependências pode ser feita com systemctl list-dependencies.
Logs do sistema
Os logs registram eventos do sistema, como erros, avisos e informações de serviços. Com o systemd, o journald coleta logs binários que podem ser consultados com journalctl. Este comando permite filtrar por unidade, prioridade, data, entre outros.
Exemplos de uso do journalctl:
# Ver logs do serviço ssh
journalctl -u ssh
# Logs das últimas 2 horas
journalctl --since "2 hours ago"
# Acompanhar logs em tempo real
journalctl -f
Os logs também podem ser persistidos em arquivos de texto tradicionais em /var/log/, como /var/log/syslog ou /var/log/messages, dependendo da configuração. Ferramentas como tail, less e grep são úteis para análise manual.
Monitoramento básico
Monitorar o sistema envolve acompanhar o uso de CPU, memória, disco, rede e processos. Comandos como top, htop (instalação opcional), vmstat, iostat e netstat fornecem métricas essenciais.
O top já é padrão e mostra processos ordenados por CPU. O htop é mais amigável, com cores e navegação interativa. O vmstat exibe estatísticas de memória, swap, I/O e CPU em intervalos regulares.
Exemplo de monitoramento com vmstat a cada 2 segundos:
vmstat 2
Para monitoramento de rede, netstat -tuln mostra portas abertas e conexões. Em distribuições mais recentes, ss é o substituto recomendado.
Boas práticas
Sempre utilize sinais adequados ao encerrar processos: SIGTERM (15) para término gracioso, SIGKILL (9) apenas se necessário. Evite matar processos do sistema sem entender seu propósito. Para serviços críticos, configure restart automático no systemd com Restart=always no arquivo de unidade. Monitore logs regularmente para detectar problemas precocemente.
Referências
- man ps
- man top
- Documentação do systemctl
- Documentação do journalctl
- man vmstat
- man htop (se instalado)
- Arch Wiki: systemd
Exercícios
- Liste todos os processos em execução no sistema, mostrando PID, nome do comando e uso de memória. Use o comando
pscom as opções adequadas. - Utilizando o
systemctl, verifique o status do serviçocron(oucrond). Se estiver ativo, pare-o e depois inicie novamente. - Consulte os logs do sistema referentes ao serviço
ssh(ousshd) das últimas 24 horas. Quantas linhas de log foram geradas? (Dica: usejournalctlewc -l) - Execute o comando
tope identifique o processo que está consumindo mais CPU. Anote seu PID e nome. Em seguida, encerre-o comkill(apenas se for um processo de usuário seguro). - Utilizando
vmstat, monitore o sistema a cada 3 segundos por 5 amostras. Explique brevemente o significado das colunasresi/so.
ps aux --sort=-%mem
Explicação: ps aux lista todos os processos com informações detalhadas. --sort=-%mem ordena por uso de memória decrescente.
systemctl status cron
sudo systemctl stop cron
sudo systemctl start cron
Nota: Em algumas distribuições, o serviço pode se chamar crond. Use sudo se necessário.
journalctl -u ssh --since "24 hours ago" | wc -l
O comando conta o número de linhas de log do serviço ssh nas últimas 24 horas.
Exemplo de saída do top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 aluno 20 0 123456 12345 1234 R 85.0 1.2 0:30.45 firefox
Para encerrar: kill 1234. Cuidado: não mate processos do sistema.
vmstat 3 5
A coluna r mostra o número de processos na fila de execução (aguardando CPU). Valores altos indicam alta demanda de CPU. As colunas si (swap in) e so (swap out) indicam a quantidade de memória trocada com o disco; valores altos sugerem falta de RAM.