Zombie procesy v Linuxu: Zkušební procesy: Najít, odstranit, zabránit
15 min čtení - 19. května 2026

Naučte se, jak v systému Linux identifikovat zombie procesy, odstraňovat je a předcházet jim. Příkazy, opravy kódu a tipy pro monitorování pro správce serverů.
Zombie procesy v Linuxu: Jak je najít a odstranit
Zombie proces je potomkový proces, který dokončil své provádění, ale stále zabírá místo v tabulce procesů jádra. Existuje proto, že rodičovský proces nezavolal wait() k získání jeho výstupního stavu. Zombie nespotřebovávají CPU ani paměť, ale každý z nich drží PID. Nechte jich nahromadit dost a váš systém nebude moci spouštět nové procesy. Tento příspěvek se zabývá tím, jak je odhalit, odstranit a zabránit jejich vzniku.
Proč jsou zombie procesy na serverech důležité
Jeden zombie proces je neškodný. Problém nastává, když se začnou hromadit. Linux má omezený prostor pro PID: 32 768 na 32bitových systémech, až 4 194 304 na 64bitových. Pokud zombie procesy zaplní tabulku procesů, jádro nemůže vytvářet nové procesy. To znamená žádné nové připojení, žádná nová pracovní vlákna, prostě nic nového.
Webové servery jako Apache a Nginx jsou obzvláště ohroženy, protože vytvářejí podprocesy pro zpracování provozu. Benchmarky ukázaly 48% pokles propustnosti, když se zombie hromadí na vytíženém webovém serveru. V roce 2019 vytvořila únik kanálu Golang v podu DNS Kubernetes přes 26 000 zombie na jediném uzlu, čímž zaplnila tabulku procesů a způsobila selhání DNS v celém clusteru.
Níže uvedená tabulka ukazuje klíčové rozdíly mezi normálním procesem a zombie:
| Charakteristika | Normální proces | Zombie proces |
|---|---|---|
| Symbol stavu | R, S, D nebo T | Z (nefunkční) |
| CPU / Paměť | Aktivní využití | 0 % / 0 (již ukončeno) |
| Záznam v tabulce procesů | Jeden slot | Jeden slot |
Odpověď na kill -9 | Okamžité ukončení | Žádný účinek (již nefunkční) |
| Paměť jádra | Plný deskriptor procesu | Pouze minimální stav ukončení |
Zásadní poznatek: nemůžete kill -9 zombie. Je již mrtvá. Jediným způsobem, jak ji vymazat, je nechat ji sklidit rodičovským procesem, nebo zabít rodiče, aby init (PID 1) ho automaticky zdědí a sklidí.
Jak najít zombie procesy
Zombie se zobrazují s písmenem Z ve sloupci STAT a <defunct> vedle názvu příkazu. Seznamte je pomocí:
ps aux | grep -w ZChcete-li zobrazit ID nadřazeného procesu (PPID), které budete potřebovat k odstranění:
ps -eo pid,ppid,stat,comm | grep -w ZPříkaz top příkaz také uvádí celkový počet zombie v záhlaví. Pro rychlou neinteraktivní kontrolu:
top -bn1 | grep zombieSledování rodičovského procesu pomocí pstree
Jakmile máte PID zombie, vysledujte jej zpět k odpovědné rodičovské instanci:
pstree -p -s <zombie_pid>Tím se zobrazí celý rodokmen od init až po zombie. Pokud pstree není nainstalován, ps auxf poskytuje podobný ASCII stromový náhled.
Počítání zombie pro monitorování
Čistý počet, který vylučuje samotný proces grep:
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Pro nepřetržité monitorování během řešení problémů:
watch -n 1 'ps aux | grep -w Z | wc -l'Jak odstranit zombie procesy
Zombie lze odstranit pouze shromážděním jejich výstupního stavu. To znamená pracovat přes nadřazený proces.
1. Najděte rodičovský proces.
ps -o ppid= -p <zombie_pid>2. Dejte rodičovskému procesu signál, aby sklidil své potomky.
kill -SIGCHLD <parent_pid>Tím se rodiči řekne, aby zavolal wait() u všech ukončených potomků. Je to nenarušující a funguje to u aplikací, které se chovají správně.
3. Pokud SIGCHLD nefunguje, restartujte službu.
systemctl restart <service_name>4. Pokud rodič nereaguje, ukončete jej.
kill <parent_pid>Nebo pokud ignoruje SIGTERM:
kill -9 <parent_pid>Když rodič zemře, init (PID 1) nebo systemd převzala osiřelé zombie a okamžitě je sklidila. Buďte opatrní na produkčních systémech. Ukončení rodičovského procesu také ukončí všechny jeho aktivní potomky.
5. Ověřte vyčištění.
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Pokud je počet 0, je vše v pořádku.
Prevence zombie procesů
Zpracování podřízených procesů ve vašem kódu
Hlavní příčinou většiny nahromadění zombie procesů je rodičovský proces, který nikdy nezavolá wait(). Opravte to u zdroje:
- C: Nastavte
signal(SIGCHLD, SIG_IGN);tak, aby automaticky zahazoval informace o ukončení potomků, nebo použijte obslužnou funkci signálu swaitpid(-1, NULL, WNOHANG)k asynchronnímu sklízení. - Python: Použijte
subprocess.run(), který čeká automaticky. Pokud používátePopen, zavolejteproc.wait()explicitně. - Bash: Přidejte
waitna konec skriptů, které spouštějí úlohy na pozadí.
Správně nakonfigurujte systemd
U služeb spravovaných systémem systemd tato nastavení zabraňují hromadění zombie procesů:
KillMode=control-groupzajišťuje, že všechny podřízené procesy budou ukončeny společně, když se služba zastaví.TimeoutStopSecdává rodičovskému procesu čas na sklizeň potomků, než systemd odešle SIGKILL.WatchdogSecautomaticky restartuje nereagující služby, zachytí případy, kdy se nadřazený proces zasekne a přestane je ukončovat.
Sledujte tabulku procesů
Nastavte cron úlohu, která se spouští každých 15 minut, aby spočítala zombie a upozornila, pokud počet překročí prahovou hodnotu:
ps aux | awk '$8 ~ /Z/' | wc -lSledujte také využití tabulky procesů porovnáním aktuálního počtu s /proc/sys/kernel/pid_max. Pokud překročí 80 %, prošetřete to, než se to stane problémem. Několik přechodných zombie během normálního provozu není důvod k obavám. Rostoucí počet, který neklesá zpět na nulu, ukazuje na chybu v aplikaci, kterou je třeba opravit.
Závěr
Zombie procesy jsou mrtvé procesy, které nebyly odstraněny. Nepoužívají CPU ani paměť, ale zabírají PID a plná tabulka procesů brání serveru v provádění jakýchkoli užitečných činností.
- Najděte je pomocí
ps aux | grep -w Za vysledujte rodičovský proces pomocípstree. - Odstraňte je zasláním
SIGCHLDna rodičovský proces, restartováním služby nebo v krajním případě zabitím rodičovského procesu. - Prevenci zajistíte napsáním kódu, který volá
wait(), správnou konfigurací systemd a sledováním tabulky procesů.
Pokud provozujete pracovní úlohy s vysokým provozem a potřebujete spolehlivou infrastrukturu s plným root přístupem, dedikované servery FDC vám poskytnou plnou kontrolu nad správou procesů a konfigurací systému.

Zombie procesy v Linuxu: Zkušební procesy: Najít, odstranit, zabránit
Naučte se, jak v systému Linux identifikovat zombie procesy, odstraňovat je a předcházet jim. Příkazy, opravy kódu a tipy pro monitorování pro správce serverů.
15 min čtení - 19. května 2026
Kontrolní seznam zabezpečení linuxových serverů
15 min čtení - 8. května 2026

Máte dotazy nebo potřebujete vlastní řešení?
Flexibilní možnosti
Globální dosah
Okamžité nasazení
Flexibilní možnosti
Globální dosah
Okamžité nasazení