Co je to zombie proces?
Zombie proces je instancí počítačového programu, který si zachovává záznam tabulky procesů i po dokončení provádění. Zaniklé procesy, jako jsou tyto, jsou obvykle spojeny s Unixem® a jinými podobnými operačními systémy kvůli způsobu, jakým zpracovávají podřízené procesy. Když je podřízený proces dokončen, rodič je obvykle zodpovědný za jeho odstranění z tabulky procesů. Obvykle není možné přímo odstranit zombie proces pomocí příkazu kill, ačkoli rodič může být často nucen jej odebrat, pokud operátor používá oznámení podřízeného signálu (SIGCHLD). V opačném případě může být zombie proces nepřímo odstraněn zabitím rodiče.
Zombie proces je metaforický popisný pojem, který odkazuje na živé mrtvé. Zaniklé procesy v Unixu® a podobných operačních systémech lze považovat za analogické zombie v tom, že si udržují přítomnost tabulky procesů i přesto, že již neplní své zamýšlené funkce. Když proces skončí provádění, někdy se říká, že zemřel, zatímco prostředky, kterými operační systém získává přidělení procesní tabulky, mohou být známy jako sklízení. Rodičovský proces zombie má technicky sklízet své děti, i když tomu tak není vždy.
Existují určité případy, kdy existence zombie procesu může být záměrná nebo dokonce žádoucí. Poté, co podřízený proces zastavil provádění, může být nutné později spustit jinou instanci stejného programu. Pokud nebyl zombie z procesní tabulky odstraněn, novému dítěti nebude přidělena stejná identifikace (ID) jako staré dítě. Některé programy mohou těžit z této diferenciace nebo dokonce vyžadují.
Pokud nadřazený proces nevykonal příkaz wait, aby sklízel zombie, za které je zodpovědný, může být možné problém vynutit. To se obvykle provádí příkazem kill a odesláním signálu SIGCHLD do nadřazeného procesu. Pokud vše funguje správně, měl by rodičovský proces, který obdrží tento signál, sklízet své zombie děti, aby bylo možné znovu použít jejich ID a pozice tabulky procesů.
Za určitých okolností může nadřazený proces ignorovat signál SIGCHLD. Pokud k tomu dojde a operátor stále touží po vymazání tabulky procesů, může být rodičovský proces zabit. Jakékoli zombie, které vytvořil nadřazený proces, budou potom přiřazeny k procesu inicializace jako děti. Protože init pravidelně iniciuje příkaz wait na svých podřízených, budou všechny zombie, za které je odpovědný, nakonec odstraněny z tabulky procesů.