Processos: ps, top, kill, jobs e sinais
2 min de leitura
Quando um processo trava, consome 100% de CPU, ou você precisa parar de forma limpa - é aqui que entra. Linux trata tudo (processos, threads, daemons) como processos com um PID (Process ID) numérico.
Vendo o que tá rodando: ps
ps # processos do shell atual
ps -e # todos
ps -ef # todos, formato full (Linux)
ps aux # todos, formato BSD (macOS, Linux também funciona)
ps aux | grep nginx # filtra
ps -ef --forest # mostra árvore de processos (Linux)
pstree -p # alternativa dedicada (se instalado)
O ps tem dois dialetos:
- BSD (macOS, opcional no Linux):
ps aux - POSIX/SysV (Linux default):
ps -ef
Os dois mostram a mesma coisa com colunas em ordem diferente. Se um script não funcionar no outro OS, geralmente é isso.
As colunas mais úteis do ps aux:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1234 0.5 1.2 123456 78901 ? Ssl Aug20 1:23 /usr/sbin/nginx
USER- donoPID- Process ID%CPU/%MEM- uso atualSTAT- estado:Rrunning,Ssleeping,Zzombie,TstoppedCOMMAND- qual binário/script
Monitoramento ao vivo: top / htop
top # monitor clássico, atualiza a cada 3s
htop # versão melhorada (instale: brew/apt install htop)
Dentro do top:
P- ordena por CPUM- ordena por memóriak- mata processo (pede PID)q- sai
htop é a mesma coisa, com UI melhor: cores, scroll com mouse,
árvore de processos visível. Vale instalar.
Cuidado com
topem servidores de produção: rodar interativamente é OK, mas em CI/CD prefirapsou leitura de/proc.topem loop infinito pode esconder processo crítico da tela.
Matando processos: kill e sinais
kill 1234 # SIGTERM (15) - pede pra fechar limpo
kill -9 1234 # SIGKILL (9) - mata sem chance de cleanup
kill -HUP 1234 # SIGHUP (1) - "recarrega config" (nginx, etc)
kill -l # lista todos os sinais
Os sinais são a forma de comunicação com processos. Os mais comuns:
SIGTERM(15) - "termine, mas faça cleanup" - primeiro a tentar. Permite o processo fechar arquivos, conexões, banco.SIGKILL(9) - "morre agora" - o kernel mata sem chance de cleanup. Use só seSIGTERMnão funcionar.SIGHUP(1) - "recarregue a configuração" - nginx, postgres, sshd usam. Não mata, só recarrega.SIGINT(2) - o que oCtrl + Cmanda. Interrupção.
Regra de ouro: sempre tente
kill PIDantes dekill -9 PID. O-9não dá chance do processo fechar conexões de banco e deixar dados consistentes.
Por nome:
killall nginx # mata todos os processos "nginx"
pkill -f "node server.js" # mata pelo padrão de command line
Background e jobs: &, fg, bg, jobs
comando-longo & # roda em background, libera o terminal
# imprime o PID
[1] 12345
jobs # lista jobs do shell atual
fg %1 # traz job 1 pro foreground
bg %1 # continua job 1 em background
Ctrl + Z # suspende o job atual (depois fg/bg pra retomar)
Ctrl + C # mata o job atual
O & é como você "dispara e esquece" um comando. Útil pra
builds longos, downloads, ou subir um servidor de dev.
O Ctrl + Z suspende o processo (vira job parado, sem executar).
bg %1 continua ele em background, fg %1 traz de volta pro
foreground.
Atenção: jobs são do shell atual. Se você fechar o terminal, os jobs podem morrer (depende do shell e do OS). Pra processos que precisam sobreviver ao logout, use
nohupoutmux(próximos nós).
nohup e disown - processos que sobrevivem ao logout
nohup comando-longo & # ignora SIGHUP, redireciona output pra nohup.out
disown %1 # remove job da tabela do shell (mas deixa rodando)
nohup faz o processo ignorar o sinal de logout (SIGHUP).
Útil pra iniciar um script, fazer logout, e o script continua
rodando no servidor.
/proc - tudo é arquivo
No Linux, cada processo tem um diretório em /proc/<PID>/ com
informações:
ls /proc/1234/ # info do processo 1234
cat /proc/1234/cmdline # linha de comando completa
cat /proc/1234/status # status detalhado
cat /proc/1234/cgroup # container/cgroup
Três conceitos que você acabou de aprender:
- PID identifica o processo.
psacha por ele,killage nele,/proc/<PID>/tem os detalhes. - Sinais são o "como" você se comunica com o processo.
SIGTERMantes deSIGKILL- sempre. &é pra "disparar e esquecer",Ctrl + Zé pra suspender.nohup/disownsão pra processos que precisam sobreviver ao logout.
Dica: o
htoptem um atalho legal: seleciona um processo e apertaF9pra mandar sinal,F7/F8pra mudar prioridade (nice),Lpra ver arquivos abertos pelo processo. Mais produtivo queps+killna unha.
No próximo, pipes e redirecionamento - a peça que cola tudo. Quando você entende pipe, o terminal vira uma linguagem.