Co je to zombie proces:
Je to proces, který skončil, ale ne celý je okamžitě odstraněn z paměti, protože jeho deskriptor procesu zůstává v paměti.
Jaké by mělo být normální chování procesu:
Když proces skončí, stav procesu se změní na
EXIT_ZOMBIE
a nadřazený proces je upozorněn, že jeho podřízený proces zemřel s
SIGCHLD
signál.
Nadřazený proces by pak měl spustit
wait()
Systémové volání přečte stav ukončení mrtvého procesu a další informace. Po
wait()
se volá, zombie proces je odstraněn z paměti. To se děje rychle, takže nevidíte, že by se ve vašem systému hromadily zombie procesy. Ale v případech, kdy vidíme, že se hromadí několik zombie procesů, jedná se o situaci, kdy programový kód není efektivní.
Jak najít zombie procesy:
Spuštění příkazu
top
Spuštění příkazu
ps -ef | grep defunct
Jak ukončit akumulující se zombie procesy:
Ve většině případů mají zombie procesy stejné ID nadřazeného procesu.
Proces lze odstranit dvěma způsoby:
- Odešlete
SIGCHLD
signál nadřazenému procesu.
Tento signál říká nadřazenému procesu, aby spustil wait()
systém volání a vyčistit své zombie děti:
kill -s SIGCHLD <PPID>
Příklad:
kill -s SIGCHLD 2201
- Ukončete zombie rodičovský proces
kill -9 <PPID>
Příklad:
kill -9 2201