Wait (systémové volání)
V moderních operačních systémech může proces využít systémové volání wait za účelem vyčkání na dokončení běhu jiného procesu. Ve většině systémů může rodičovský proces vytvořit nezávisle se provádějící potomek. Rodičovský proces následně může použít systémové volání wait, které pozastaví vykonávání rodičovského procesu do doby, než se ukončí potomek. Tento potomek při svém ukončení vrátí návratový kód operačnímu systému. Operační systém následně zašle tento kód čekajícímu rodičovskému procesu, který obnoví své provádění.
Moderní operační systémy také poskytují systémové volání umožňující používání vláken procesů podobným způsobem.
Operační systém může poskytovat více variant systémového volání wait, které umožní počkat na ukončení jakéhokoliv potomka anebo počkat na jednoho potomka identifikovaného pomocí jeho PID.
Některé operační systémy rodičovskému procesu zašlou signál SIGCHLD v okamžiku, kdy se potomek ukončí za účelem informování rodičovského procesu a umožnění získání návratového kódu potomka.
Zombie a sirotci
[editovat | editovat zdroj]Jakmile potomek skončí, stane se zombie procesem a i nadále existuje v systémové tabulce procesů i přesto, že se nejedná o vykonávající se program. Za normálních okolností rodičovský proces na potomka čeká a získá tedy návratový kód. Operační systém následně odebere potomku prostředky, které měl přiděleny a z tabulky procesů zmizí. Pokud ovšem rodičovský proces na potomka nečeká, nadále zabírá přidělené prostředky a jedná se o únik prostředků. Tyto situace jsou obvykle řešeny pomocí speciálního procesu, který hledá zombie procesy a získává jejich návratový kód, což umožní operačnímu systému dealokovat přidělené prostředky.
Naopak potomek, kterému se ukončí rodič předtím, než potomek sám, se stane osiřelým procesem. Tyto situace se obvykle řeší speciálním kořenovým (či init) procesem, který se stane novým rodičem osiřelého procesu. Tento speciální program detekuje, kdy se osiřelý proces ukončí a následně získá jeho návratový kód, čímž umožní systému dealokovat jemu přidělené prostředky.
Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku wait (system call) na anglické Wikipedii.