Processos
Nesta aula, você aprenderá a gerenciar e monitorar processos no Linux usando comandos como ps e pstree, entenderá os conceitos de PID e PPID, e conhecerá os estados de processo. Ao final, você será capaz de identificar processos em execução, visualizar sua hierarquia e compreender como o sistema operacional gerencia cada um deles.
Processos são programas em execução no sistema. Cada comando que você digita no terminal, cada serviço do sistema, cada aplicativo gráfico é um processo. Entender como listar, monitorar e interpretar informações sobre processos é fundamental para administrar um sistema Linux, diagnosticar problemas e otimizar o desempenho.
Nesta aula, vamos explorar os comandos ps e pstree, além de compreender os conceitos de PID (Process ID) e PPID (Parent Process ID) e os estados que um processo pode assumir. Você verá exemplos práticos e aprenderá a extrair informações valiosas do sistema.
ps
O comando ps (process status) é uma das ferramentas mais utilizadas para visualizar informações sobre processos ativos no sistema. Ele exibe uma fotografia instantânea dos processos em um determinado momento. Existem várias opções que controlam quais processos são mostrados e quais informações são exibidas.
A sintaxe básica é ps [opções]. Sem opções, o ps mostra apenas os processos associados ao terminal atual. Para ver todos os processos do sistema, usamos opções como -e (ou -A) para listar todos, e -f para exibir informações completas (formato longo). Combinando opções, podemos obter uma visão detalhada.
Exemplos comuns:
# Lista todos os processos do sistema com formato longo
ps -ef
# Lista todos os processos com informações de usuário e CPU/memória
ps aux
# Filtra por nome do processo
ps -C bash
# Mostra a árvore de processos (semelhante ao pstree, mas com ps)
ps -ejH
A saída do ps aux inclui colunas como USER (dono do processo), PID, %CPU, %MEM, VSZ (tamanho virtual), RSS (memória residente), TTY (terminal), STAT (estado), START (hora de início) e COMMAND (comando executado). Essas informações são essenciais para monitorar o consumo de recursos.
pstree
O comando pstree exibe os processos em forma de árvore, mostrando a hierarquia de parentesco entre eles. Cada processo é representado por um nó, e os processos filhos são exibidos abaixo de seus pais. Essa visualização é útil para entender a relação entre processos e identificar processos órfãos ou zumbis.
Por padrão, o pstree mostra todos os processos do sistema, mas você pode especificar um PID para ver a árvore a partir daquele processo. Opções comuns incluem -p para mostrar os PIDs e -u para mostrar mudanças de usuário.
# Exibe a árvore de processos com PIDs
pstree -p
# Exibe a árvore a partir do PID 1 (systemd)
pstree -p 1
# Exibe a árvore com destaque para processos do usuário atual
pstree -u
O pstree é particularmente útil para visualizar como os processos são organizados e como o sistema inicial (geralmente o systemd) é o pai de todos os processos.
PID e PPID
Todo processo no Linux recebe um identificador único chamado PID (Process ID). Esse número é atribuído pelo sistema e é usado para controlar o processo. O PID 1 é o primeiro processo iniciado pelo kernel (normalmente o systemd ou init), e todos os outros processos são descendentes dele.
Além do PID, cada processo tem um PPID (Parent Process ID), que é o PID do processo que o criou. Quando um processo é criado, ele herda o PPID de seu pai. O PPID é importante para rastrear a origem de um processo e para entender a hierarquia.
Você pode descobrir o PID e PPID de um processo usando o comando ps com as opções -o para especificar os campos desejados. Por exemplo:
# Mostra PID, PPID e comando
ps -o pid,ppid,comm
# Mostra PID, PPID e comando de um processo específico
ps -o pid,ppid,comm -C bash
No shell, você pode obter o PID do shell atual com echo $$ e o PPID com echo $PPID. Isso é útil em scripts para saber o contexto de execução.
echo "PID do shell: $$"
echo "PPID do shell: $PPID"
Estados de processo
Um processo pode estar em diferentes estados durante seu ciclo de vida. O Linux define vários estados, que são exibidos na coluna STAT do comando ps. Os principais são:
- R (Running): o processo está em execução ou pronto para executar na CPU.
- S (Sleeping): o processo está dormindo, aguardando algum evento (como entrada/saída).
- D (Uninterruptible Sleep): o processo está em espera não interrompível, geralmente aguardando operações de I/O com disco.
- T (Stopped): o processo foi pausado, por exemplo, via Ctrl+Z.
- Z (Zombie): o processo já terminou, mas ainda está na tabela de processos aguardando que o pai colete seu status.
- I (Idle): processo inativo, usado em threads do kernel.
Esses estados podem ser combinados com caracteres adicionais, como s (session leader), l (multithreaded), etc. Entender o estado de um processo ajuda a diagnosticar problemas, como processos travados ou zumbis.
Exemplo de como ver os estados:
# Mostra processos com estado
ps -o pid,state,comm
Para ver todos os processos com seus estados, use ps aux e observe a coluna STAT.
Boas práticas e observações finais
Ao trabalhar com processos, é importante:
- Use
pspara obter uma visão instantânea, mas para monitoramento contínuo, considere otopouhtop. - Identifique processos zumbis e evite acumulá-los; eles podem indicar problemas no processo pai.
- Combine
pscomgreppara filtrar rapidamente por nome ou outros critérios. - Para matar um processo, use
killcom o PID, mas primeiro entenda o que o processo faz. - Em scripts, use
$$e$PPIDpara identificar o script e seu pai, útil para logging.
Exercícios
- Qual comando você usaria para listar todos os processos do sistema com informações detalhadas? Escreva o comando e explique o que cada coluna principal representa.
- Como você faria para visualizar a árvore de processos a partir do processo de PID 1? Que comando e opções usaria?
- Explique a diferença entre PID e PPID. Como você pode descobrir o PID e PPID de um processo específico usando o comando ps?
- Cite os principais estados de processo no Linux e descreva o que cada um significa. Dê um exemplo de quando um processo pode estar no estado Z (zumbi).
- Usando o shell, escreva um pequeno script que imprima o PID do script e o PID do processo pai, e depois execute-o.
ps -ef ou ps aux. As colunas principais são: USER (dono), PID (ID do processo), %CPU (uso de CPU), %MEM (uso de memória), VSZ (tamanho virtual em KB), RSS (memória residente em KB), TTY (terminal), STAT (estado), START (hora de início) e COMMAND (comando executado).pstree -p 1. Isso mostra o processo 1 (geralmente systemd) e todos os seus descendentes, com os PIDs.ps -o pid,ppid -C nome_do_processo ou ps -o pid,ppid -p PID.wait() para coletar seu status, permanecendo na tabela de processos até que o pai seja encerrado ou trate isso.#!/bin/bash
echo "PID do script: $$"
echo "PPID do script: $PPID"
Salve como meu_script.sh, dê permissão de execução (chmod +x meu_script.sh) e execute ./meu_script.sh.