Když říkáme, že proces má řídící terminál, myslíme tím, že samotný proces má řídící terminál, nebo je to relace, ke které proces patří, která má řídící terminál?
Dříve jsem si myslel, že je to relace, která má řídicí terminál, ale pak jsem si přečetl následující (odtud), z čehož vyplývá, že je to proces, který má řídicí terminál:
Jedním z atributů procesu je jeho řídící terminál. Podřízené
procesy vytvořené pomocí fork dědí řídicí terminál od
svého nadřazeného procesu. Tímto způsobem všechny procesy v relaci
zdědí řídicí terminál od vedoucího relace. Vedoucí relace
, který ovládá terminál, se nazývá řídicí
proces tohoto terminálu.
Přijatá odpověď:
Je to skutečně relace, která má řídicí terminál
Specifikace jednotného systému UNIX popisuje vztah z hlediska řídícího terminálu být „spojen s relací“. Jak je dále specifikováno, řídící terminál má vztah 1:1 s relací. S relací je spojen „nejvýše jeden řídicí terminál“ a „řídící terminál je spojen přesně s jednou relací“.
FreeBSD Návrh a implementace kniha k tomu přistupuje trochu jinak, ale dosahuje stejného místa. Není možné, aby procesy, které sdílejí stejnou relaci, měly různé řídicí terminály, ani není možné, aby jeden terminál byl řídicím terminálem více relací.
Interně ve FreeBSD tak datové struktury skutečně fungují. Struktura procesu má ukazatel na pgrp
struktura představující skupinu procesů, do které proces patří, což zase ukazuje na session
struktura představující relaci, do které skupina procesů patří, což zase ukazuje na tty
struktura řídicího terminálu pro relaci.
Interně v Linuxu jsou věci o něco složitější. Každý task_struct
má sadu ukazatelů na pid
struktury pro jeho ID skupiny procesů a ID relace; a má další ukazatel na signal_struct
pro jednotlivé procesy struktura, která zase přímo ukazuje na tty
struktura řídicího terminálu.
Další čtení
- George V. Neville-Neil, Marshall Kirk McKusick a Robert N. M. Watson (2014-09-25). "Řízení procesu". Návrh a implementace operačního systému FreeBSD . Addison-Wesley Professional. ISBN 9780133761832.
- Donald Lewine (1991). „Terminál I/O“. Příručka programátorů POSIX . O’Reilly Media, Inc. ISBN 9780937175736.
- Daniel P. Bovet a Marco Cesati (2005). „Procesy“. Porozumění linuxovému jádru:Od I/O portů po správu procesů . 3. vydání. O’Reilly Media, Inc. ISBN 9780596554910.
- „Definice“. Základní specifikace otevřené skupiny . Vydání 7. 2016. IEEE 1003.1:2008.
- „Obecné rozhraní terminálu“. Základní specifikace otevřené skupiny . Vydání 7. 2016. IEEE 1003.1:2008.