Skupina procesů
Skupina procesů je v informatice prostředek pro označení (zastřešení) množiny jednoho nebo více procesů, zřízený kvůli možnosti odvolávat se na několik spolu souvisejících procesů jedním identifikátorem. Skupiny procesů jsou využívány k ovládání a distribuci signálů. Signál nasměrovaný do skupiny procesů je individuálně doručen všem procesům ve skupině. Skupiny procesů jsou dostupné v operačních systémech vycházejících ze standardu POSIX.
Skupiny procesů jsou dále seskupovány do sessions (sezení). Skupiny procesů mohou migrovat do jiných sessions a proces smí vytvářet nové skupiny procesů pouze v rámci té session, kde se sám nachází. Nové obrazy procesů jsou vytvořené voláním funkce z rodiny exec, dědí členství ve skupině procesů a skupinové členství svého původního obrazu.
Využití
Rozdělení signálů skupinám procesů utváří základní správu řízení úloh využívaných programy shellu. Ovladač tty v sobě zahrnuje obecnou definici foreground skupiny procesů, ke kterým vysílá signály: SIGTSTP, SIGQUIT a SIGINT generované přerušeními z klávesnice. Posílá také SIGTTIN a SIGTTOU signály každému procesu, který se pokusí číst nebo zapisovat do terminálu a zároveň není ve foreground skupinou procesů. Shell okamžitě vytvoří oddělené roury skupin procesů a určuje, která skupina je foreground daný terminál, takto ovlivní, jaké procesy (a jaké roury) mohou zobrazovat na výstup terminálu a získávat vstupy z terminálu v konkrétním čase.
Když shell rozdvojí proces (operací fork) pro příkazovou rouru, potomek i rodič se okamžitě pokusí stát se hlavním procesem skupiny. Oba procesy se pokusí provést to samé, aby se předešlo souběhu potomka, který se stává hlavním procesem skupiny procesů vykonávajícího obraz programu vykonávaného příkazu a rodiče nebo tty ovladače, snažícího se poslat signál řídící skupině. To ale může vyvolat jiný souběh, kdy potomek skončí akci před, než rodič začne. Rodič pak může nastavit špatný proces jako hlavní ve skupině. Nejbezpečnější je, nechat rodiče počkat, než se potomek stane hlavní ve skupině použitím vfork() nebo využitím komunikace skrz rouru.
V případě textového terminálu na Unixovém systému se v rámci sezení implementují uživatelská sezení. Jediný proces, session leader, interaguje s ovládacím terminálem. Tak se dá zajistit, aby byly všechny programy ukončeny, když uživatel ukončí spojení s terminálem. Tam kde není session leader, očekává se u foreground skupiny procesů, že budou schopny zvládnout ukončení spojení samy.
Koncept session je téměř nepoužitelný v případě grafických uživatelské rozhraní, kde je zapojen X display manager. Zde je pro uživatelská sezení potřeba využít jiné mechanismy.
Podrobnosti
Systémové volání setsid() je využito k vytvoření nového session obsahující jedinou (novou) skupinu procesů. Skupiny procesů jsou identifikovány celým kladným číslem (integer), ID skupiny procesů je identifikátorem toho procesu, který je nebo byl hlavním ve skupině procesů. Skupiny procesů nemusí mít nutně hlavní proces, ačkoliv je vždy některý z nich první v pořadí. Sessions jsou identifikována pomocí ID skupiny procesů hlavního procesu v session.
Systémové volání setpgid() se využívá pro nastavení ID skupiny procesů a to buď sloučením procesů do již existující skupiny procesů nebo vytvořením nové skupiny procesů v rámci session s procesem, který se pak stane hlavním procesem nově vzniklé skupiny. POSIX zakazuje opětovné využití ID procesů, pokud skupina s tímto identifikátorem stále existuje. Takto je garantováno, že se procesy nestanou hlavními procesy ve skupině omylem.
Systémové volání kill je schopné směrovat signály buď k jednotlivým procesům, nebo skupinám procesů.
Reference
V tomto článku byl použit překlad textu z článku Process group na anglické Wikipedii.