Mão na massa · ~55 min
Diagnóstico de processos — e o PID duplo do container
Hoje você localiza processos de verdade com ps e top, revisita o /proc do Encontro 2 sob uma
nova luz, e fecha com o reforço Docker: o mesmo processo visto de dentro e de fora de um container.
Passo 1 de 8
A fotografia de tudo que está rodando
ps aux lista todos os processos do sistema num instante só — a primeira ferramenta de diagnóstico do dia.ps auxO que é
Lista todos os processos rodando agora, com colunas como USER, PID, %CPU, %MEM, STAT e COMMAND.
Por que importa
É o primeiro comando que qualquer profissional roda quando quer saber "o que está acontecendo" numa máquina.
$ ps aux USER PID %CPU %MEM STAT COMMAND root 1 0.0 0.1 Ss /sbin/init root 842 0.2 0.4 Ss systemd-journald aluno 1930 0.0 0.3 Ss bash aluno 2044 0.0 0.1 R+ ps aux
uma lista longa — dezenas de linhas, mesmo numa VM "vazia". Reparem no PID 1 (init) e no
processo do próprio ps aux aparecendo na lista (STAT "R+", rodando agora).
A lista é grande demais, não sei o que procurar
Normal — ps aux mostra tudo por padrão. No próximo passo você vai filtrar.
Passo 2 de 8
Encontrando um processo específico
ps aux | grep bashO que é
O | (pipe) encana a saída do ps aux pro grep, que filtra só as linhas contendo "bash".
Por que importa
É assim que, na prática, alguém confirma se um processo específico (um servidor, um script) está rodando ou não.
$ ps aux | grep bash aluno 1930 0.0 0.3 Ss bash aluno 2051 0.0 0.0 S+ grep bash
a linha do seu próprio terminal (bash) e, curiosamente, uma linha do próprio grep bash que
você acabou de rodar — ele também é um processo, e apareceu procurando por si mesmo.
qual a diferença entre o que ps aux mostra e o que top (passo 4) mostra? Cite uma vantagem de cada um.
0 / 40 caracteres
Passo 3 de 8
A versão crua, direto do /proc
/proc. Vamos confirmar isso com o PID do seu próprio terminal.cat /proc/$$/status | head -5O que é
$$ é uma variável especial do shell que vale o PID do próprio terminal em que você está
digitando.
Por que importa
Prova que ps não é mágica — ele só lê e organiza arquivos que já existem dentro de
/proc/<pid>/.
$ cat /proc/$$/status | head -5 Name: bash State: S (sleeping) Tgid: 1930 Pid: 1930 PPid: 1721
o campo "Name" deve ser bash (ou o shell que você estiver usando), e o "Pid" deve bater com o
número que apareceu no ps aux | grep bash do passo anterior.
O que significa "State: S (sleeping)"?
É o estado "bloqueado" do slide 5 — seu terminal está parado esperando você digitar algo (uma forma de E/S). Assim que você aperta uma tecla, ele volta pra fila de pronto e depois roda.
Passo 4 de 8
O vídeo ao vivo
topO que é
Mostra os processos ao vivo, atualizando a cada segundo, ordenados por quem consome mais CPU agora.
Por que importa
É a ferramenta que qualquer pessoa usa pra descobrir, em tempo real, o que está consumindo os recursos de uma máquina.
uma tela cheia, atualizando sozinha. Repare na linha "load average" no topo — a fila média de
processos esperando CPU nos últimos 1, 5 e 15 minutos. Aperte q pra sair.
A tela do top parece confusa
Ignore a maioria das colunas por enquanto — foque em %CPU, %MEM e COMMAND. O resto vem com
a prática.
Passo 5 de 8
Subindo um container em segundo plano
sleep — pra comparar como ele aparece de dentro e de fora.docker run -d --name meuproc alpine sleep 300O que é
-d ("detached") sobe o container em segundo plano. sleep 300 só espera 300 segundos, sem
fazer mais nada — um processo fácil de rastrear.
Por que importa
Cria um processo isolado, com nome fácil de filtrar (meuproc), pra comparar as duas visões do
próximo passo.
$ docker run -d --name meuproc alpine sleep 300 8f2c91a7e6b04d3e...
um código longo (o ID do container) impresso na tela, e o comando volta pro seu prompt
imediatamente — o -d não prende seu terminal.
Passo 6 de 8
O processo visto de fora (no host)
ps aux | grep sleepO que é
Filtra a lista de processos do host procurando por "sleep" — o comando que está rodando dentro do container.
Por que importa
Prova que, visto de fora, o container não é nada especial — é só mais um processo na lista do host, com um PID qualquer.
$ ps aux | grep sleep root 48213 0.0 0.0 Ss sleep 300
um PID qualquer (nesse exemplo, 48213) — provavelmente um número alto, parecido com qualquer outro processo do host. Anote esse número, você vai compará-lo no próximo passo.
Passo 7 de 8
O mesmo processo visto de dentro (no container)
docker exec meuproc ps auxO que é
docker exec roda um comando dentro de um container que já está de pé — aqui, o próprio
ps aux.
Por que importa
É o momento em que o namespace de PID aparece na prática — o "aha" da aula de hoje.
$ docker exec meuproc ps aux PID USER COMMAND 1 root sleep 300
o mesmo processo sleep 300 — só que agora com PID 1, não o número que você anotou no
passo 6. É o mesmo processo, dois números diferentes, dependendo de quem está perguntando.
docker exec deu erro "container not found"
Confirme que o container ainda está rodando com docker ps. Se ele já tiver terminado
(improvável em 300 segundos), repita o passo 5.
compare o PID do passo 6 (fora) com o PID do passo 7 (dentro). Por que eles são diferentes, mesmo sendo o mesmo processo?
0 / 40 caracteres
Passo 8 de 8
Encerrando e limpando
docker stop meuproc && docker rm meuprocO que é
docker stop encerra o container (não precisa esperar os 300 segundos). docker rm remove o
registro dele.
Por que importa
Boa prática básica: não deixar containers de teste "esquecidos" rodando ou ocupando espaço.
o nome meuproc impresso duas vezes (uma pra cada comando), confirmando a parada e a remoção.
livre: algo que te surpreendeu ou uma dúvida que sobrou de hoje.
0 / 40 caracteres
Exemplo de observação forte × fraca
Observação fraca
"O PID de dentro do container era diferente do PID de fora."
Observação forte
"De fora, o sleep apareceu como PID 48213 — um número comum, misturado com todos os outros
processos do host. De dentro, apareceu como PID 1, porque o container tem seu próprio namespace
de PID: ele conta os processos começando do zero, isolado do host."
Checklist final
- Rodei
ps auxe identifiquei pelo menos 3 colunas diferentes - Filtrei um processo específico com
ps aux | grep - Comparei
ps auxcomcat /proc/$$/status - Observei o
topao vivo e identifiquei o load average - Subi um container e comparei o PID visto de fora e de dentro
- Preenchi as 3 observações acima (vou colar no quiz semanal)