Aprenda / Terminal e linha de comando

FundamentosAula 8 de 1616 min0% da trilha

Processos: ps, kill, top e jobs

Todo programa rodando é um 'processo' com um número — e saber enxergar, pausar e encerrar processos evita muito Ctrl+C desesperado.

Todo programa que roda no seu computador — um servidor local, um script, até o próprio terminal — é um processo: uma execução com um número de identificação único, o PID (process ID). Saber ver quais processos estão rodando, pausá-los e encerrá-los é o que separa "fechar o terminal e torcer" de resolver o problema de verdade.

ps aux — a lista de processos

terminal
ps aux

ps (process status) lista processos; aux é um combo de flags clássico que mostra todos os processos de todos os usuários (a), com informações de dono e uso de recursos (u), incluindo processos sem terminal associado (x). A coluna PID é o número que você vai usar pra apontar exatamente qual processo mexer a seguir.

kill vs. kill -9

kill envia um sinal pra um processo, pedindo pra ele se encerrar. O nome é um pouco enganoso: o kill padrão (sinal SIGTERM) é um pedido educado — avisa o processo, que pode se preparar (salvar estado, fechar conexões) antes de sair.

terminal
kill 1421

Quando isso não funciona — o processo trava e ignora o pedido —, existe a versão sem meio-termo: kill -9, que envia SIGKILL, um sinal que o sistema operacional executa à força, sem dar chance nenhuma ao processo de reagir.

terminal
kill -9 1421

A diferença importa: kill -9 pode deixar arquivos temporários abertos, conexões de rede penduradas ou dados não salvos, porque o processo não teve chance de "se despedir" de nada. Por isso o padrão é sempre tentar kill primeiro, e só usar -9 quando o processo realmente não responde.

top — consumo em tempo real

ps aux é uma foto do momento. top (ou htop, uma versão mais colorida e interativa, se estiver instalado) mostra os processos atualizando ao vivo, ordenados por quem está consumindo mais CPU ou memória — ótimo pra descobrir o que está travando a máquina agora.

terminal
top

Dentro do top, a tecla q sai (mesma lógica do less), e k deixa você digitar um PID pra matar sem sair da tela.

Background com &, jobs, fg e bg

Quando você roda um comando normalmente, o terminal fica ocupado até ele terminar — você não consegue digitar outro comando enquanto isso. Colocar & no final manda o comando rodar em segundo plano, devolvendo o terminal pra você imediatamente.

terminal
npm run dev &

O número entre colchetes é o job ID; o segundo é o PID. jobs lista tudo que está rodando em background na sessão atual do terminal:

terminal
jobs

fg (foreground) traz um job de volta pro primeiro plano; bg (background) manda continuar rodando em segundo plano depois de pausado.

Ctrl+C vs. Ctrl+Z

Esses dois atalhos confundem muita gente no início porque parecem fazer a mesma coisa — "parar o que está rodando" — mas são bem diferentes. Ctrl+C envia SIGINT, pedindo pro processo encerrar de vez. Ctrl+Z envia SIGTSTP, que apenas pausa o processo, deixando ele "congelado" — ele continua existindo, só não está mais executando, e pode voltar a rodar depois com fg ou bg.

terminal
# processo rodando em primeiro plano...
# Ctrl+Z
[1]+  Stopped    npm run dev
bg

Exercício

Você iniciou um servidor com npm run dev e ele travou, sem responder a nenhum comando. Você já sabe o PID (pelo ps aux) e já tentou kill normal, sem sucesso. Qual o próximo comando, e o que ele faz de diferente do kill normal?

Quiz rápido

Qual a diferença real entre 'kill 1421' e 'kill -9 1421'?
O que diferencia Ctrl+C de Ctrl+Z num processo rodando no terminal?