Em servidores Linux em produção, especialmente ambientes com alto volume de requisições como WordPress, workers, cron jobs e filas, é comum encontrar processos zumbis no Linux.
Eles não consomem CPU de forma ativa, mas indicam falhas na gestão de processos e podem esgotar a tabela de processos caso se acumulem.
Neste guia técnico você vai entender:
- O que são processos zumbis
- Por que surgem
- Como identificá-los
- Como limpar a tabela de processos
- Como evitar recorrência
O que são processos zumbis no Linux?
Um processo zumbi (defunct) é um processo que:
- Já terminou sua execução
- Não está mais em execução ativa
- Permanece listado na tabela de processos
- Aguarda o processo pai coletar seu status de saída
Quando um processo filho termina, ele envia o sinal SIGCHLD ao processo pai. O pai deve executar wait() ou waitpid() para coletar o status.
Se o pai não fizer isso, o processo entra no estado:
Z (zombie)
Por que processos zumbis aparecem?
As causas mais comuns incluem:
- Scripts mal escritos (bash, Python, PHP CLI)
- Aplicações que usam
fork()sem chamarwait() - Processo pai travado
- Serviços que ignoram SIGCHLD
- Bugs em aplicações customizadas
Em ambientes web com PHP-FPM ou workers assíncronos, isso pode ocorrer com frequência quando há falhas no controle de subprocessos.
Como identificar processos zumbis no Linux
Usando ps
ps -eo pid,ppid,state,cmd | grep Z
Exemplo de saída:
12345 6789 Z [php-fpm] <defunct>
Onde:
- Z indica estado zumbi
- PPID indica o processo pai
Verificando no top
top
Se houver processos zumbis, aparecerá algo como:
Tasks: 210 total, 1 zombie
Conferindo o limite de PIDs
cat /proc/sys/kernel/pid_max
Se muitos processos zumbis no Linux se acumularem, o servidor pode atingir esse limite e impedir a criação de novos processos.
Como limpar processos zumbis no Linux
Passo 1: Identifique o processo pai
ps -eo pid,ppid,state,cmd | grep Z
Anote o PPID.
Passo 2: Verifique o processo pai
ps -fp <PPID>
Método recomendado: reiniciar o serviço pai
Se o processo for gerenciado pelo systemd, reinicie o serviço:
systemctl restart nome-do-servico
Essa é a forma mais segura de limpar a tabela de processos.
Alternativa: enviar sinal SIGCHLD
kill -SIGCHLD <PPID>
Isso pode forçar o processo pai a coletar o status do filho.
Último recurso: matar o processo pai
kill -9 <PPID>
Quando o processo pai é encerrado, o PID 1 (systemd) assume os filhos e coleta os zumbis automaticamente.
Use com cautela em ambiente de produção.
Como evitar acúmulo de processos zumbis
Corrigir código que cria subprocessos
Sempre utilizar wait() ou waitpid() após fork().
Configurar serviços corretamente
No unit file do systemd:
Restart=always KillMode=process
Monitorar continuamente
É possível criar alerta simples:
ps -eo state | grep -c Z
Ou integrar com ferramentas como:
- Zabbix
- Prometheus
- Grafana
Diferença entre processos zumbis e processos órfãos
| Tipo | Está rodando | Tem pai | É problema |
|---|---|---|---|
| Zumbi | Não | Sim | Sim |
| Órfão | Sim | Não | Não |
Processos órfãos são adotados automaticamente pelo systemd (PID 1) e não representam risco.
Quando se preocupar com processos zumbis no Linux?
Você deve investigar imediatamente se:
- Existem dezenas ou centenas de processos zumbis
- O número cresce continuamente
- Serviços falham ao criar novos processos
- O servidor atinge o limite de PID
FAQ
É um processo que já terminou sua execução, mas permanece na tabela de processos aguardando o pai coletar seu status.
Não consomem CPU nem memória significativa, mas ocupam entrada na tabela de processos.
Não é possível matar diretamente o zumbi. É necessário reiniciar ou corrigir o processo pai.
Se acumularem em grande quantidade, podem atingir o limite de PIDs e impedir a criação de novos processos.
Garantindo que aplicações tratem corretamente o sinal SIGCHLD e utilizem wait() ou waitpid()
Veja Mais:
CPU ociosa com sistema lento: como identificar gargalos reais no servidor

