Session
obvykle odkazuje na relace shellu. Shell je to, co vám umožňuje interakci s počítačem. Funguje jako most mezi uživatelem a jádrem. Kdykoli spustíte příkaz, je to shell, který zachytí váš záměr a řekne jádru, aby udělalo jeho věc.
Ve většině verzí Linuxu je výchozí shell bash
a nový bash
relace bude spuštěna pokaždé, když otevřete nový terminál. Ve výstupu w
co jste odeslali, zdá se, že máte svou grafickou přihlašovací relaci (vypadá to, jako byste na stroji šlápli):
argento :0 18set13 ?xdm? 2days 1.58s gdm-session-worker [pam/gdm-password]
Několik otevřených emulátorů terminálu:
argento pts/0 18set13 29:26m 5:26 5:26 rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento pts/1 18set13 9days 0.16s 0.16s /bin/bash
argento pts/2 lun10 5.00s 0.09s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/3 14:40 33:41 0.09s 0.03s vim notes.txt
argento pts/4 gio12 26:04m 0.10s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/5 14:56 17:33 0.11s 0.11s /bin/bash
A také se zdá, že jste se přihlásili z negrafického tty:
argento tty2 15:11 1:01 0.09s 0.09s -bash
Každá z nich je samostatnou instancí vašeho shellu a každá se počítá jako vlastní relace.
1. I když se uživatel přihlásí do jediného procesu (shell, což je rozhraní příkazového řádku), uživatelé nakonec spustí mnoho procesů jako výsledek akce jako:
-> Spuštění neinteraktivní úlohy na pozadí.
-> Přepínání mezi interaktivními úlohami prostřednictvím řízení úloh.
-> Spuštění více procesů, které spolupracují prostřednictvím potrubí.
-> Spuštění systému oken, jako je systém X oken, který umožňuje otevření více oken terminálu.
2. Aby bylo možné zvládnout všechny tyto procesy, potřebuje jádro vytvořit skupiny procesů složené z těchto procesů.
3. Aby bylo možné tyto skupiny procesů dále spravovat podle uživatele, jsou tyto skupiny rozděleny podle uživatele do relací. (Poznámka zde uživatel není uživatel linuxu, ale shell nebo terminál zastupuje uživatele. Dva terminály na stejném počítači přihlášené stejným uživatelem linuxu zde znamená 2 různé uživatele a tedy 2 různé uživatelské relace. Terminál může ovládat terminál pouze pro jednu relaci).
Proces, který spouští shell pro tohoto „uživatele“ nebo relaci, se nazývá vedoucí relace.
4. Všimněte si také, že uzavření terminálu stisknutím tlačítka „x“ vás neopustí. Tento terminál běží na pozadí. Pokud chcete přerušit relaci z terminálu, musíte se odtud odhlásit stisknutím kláves CTRL+D nebo ukončit.
5. Když se odhlásíte z terminálu, jádro odešle signál SIGHUP (podobný kill -1) procesu, který je vedoucím relace. Nyní je každý další proces, který běží v terminálu, potomkem tohoto vedoucího relace. Tyto podřízené procesy vytvořily skupiny procesů, které jsou řízeny tímto procesem vedoucího relace (nadřazeným procesem).
6. Proces vedoucího relace pošle SIGHUP každému podřízenému procesu, některé procesy se ukončí, zatímco některé se mohou rozhodnout neukončit (ty, které jsou pozastaveny nebo běží na pozadí). Ti, kteří se rozhodnou neukončit, osiří při překročení relací a okamžitě je adoptuje proces init (rodič všech procesů v linuxovém počítači).
Další informace naleznete v odkazu Procesní model vývoje Linuxu
Myslím, že každá terminálová relace je uživatelská relace. Můžete mít více než jeden terminál pod X a to jsou virtuální terminály, nebo můžete mít skutečný terminál pod konzolou. To jsou všechny relace. Toto je moje 'w'
$ w
15:14:13 up 9 days, 6:02, 8 users, load average: 1,03, 1,19, 1,31
USER TTY [email protected] IDLE JCPU PCPU WHAT
argento :0 18set13 ?xdm? 2days 1.58s gdm-session-worker [pam/gdm-password]
argento pts/0 18set13 29:26m 5:26 5:26 rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento pts/1 18set13 9days 0.16s 0.16s /bin/bash
argento pts/2 lun10 5.00s 0.09s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/3 14:40 33:41 0.09s 0.03s vim notes.txt
argento pts/4 gio12 26:04m 0.10s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/5 14:56 17:33 0.11s 0.11s /bin/bash
argento tty2 15:11 1:01 0.09s 0.09s -bash
Druhý sloupec zobrazuje tty, jak můžete vidět, že body jsou xterm (virtuální terminál), druhý (tty2) je přihlášení do konzole.