Na Lubuntu 18.04 spouštím shell v lxterminálu. Jeho řídicí terminál je aktuální pseudoterminální slave:
$ tty
/dev/pts/2
Chtěl bych vědět, jaké jsou vztahy mezi mým současným ovládacím terminálem /dev/pts/2
a /dev/tty
.
-
/dev/tty
funguje jako můj aktuální ovládací terminál/dev/pts/2
:$ echo hello > /dev/tty hello $ cat < /dev/tty world world ^C
-
Zdá se však, že se jedná o nesouvisející soubory, místo aby jeden byl symbolickým odkazem
nebo pevným odkazem na druhý:$ ls -lai /dev/tty /dev/pts/2 5 crw--w---- 1 t tty 136, 2 May 31 16:38 /dev/pts/2 13 crw-rw-rw- 1 root tty 5, 0 May 31 16:36 /dev/tty
Pro různé relace s různými ovládacími terminály, if/dev/tty
je zaručeno, že jsou jejich ovládacími terminály. Jak mohou
to být různé ovládací terminály, aniž by to byl symbolický odkaz nebo
pevný odkaz?
Jaké jsou tedy jejich vztahy a rozdíly? Jakákoli pomoc je velmi oceňována!
Tento příspěvek pochází z dřívějšího. Odkazuje výstup příkazu `tty` a soubor `/dev/tty` na řídicí terminál aktuálního bash procesu?
Přijatá odpověď:
tty
manuálová stránka v sekci 4 tvrdí následující:
Soubor /dev/tty je znakový soubor s hlavním číslem 5 a vedlejším
číslem 0, obvykle v režimu 0666 a vlastník.skupina root.tty. Je to
synonymum pro řídicí terminál procesu, pokud existuje.Kromě
ioctl(2)
požadavky podporované zařízením, na které tty
odkazuje,ioctl(2)
požadavekTIOCNOTTY
je podporováno.
TIOCNOTTY
Odpojte volající proces od jeho řídícího terminálu.
Pokud je proces vedoucí relace, pak
SIGHUP
aSIGCONT
signály
jsou odeslány do skupiny procesů v popředí a všechny procesy v
aktuální relaci ztratí svůj řídicí tty.Toto
ioctl(2)
volání funguje pouze na deskriptorech souborů připojených k /dev/tty . Používají ho procesy démonů, když je vyvolá
uživatel na terminálu. Proces se pokusí otevřít /dev/tty . Pokud
otevření proběhne úspěšně, odpojí se od terminálu pomocíTIOCNOTTY
, zatímco pokud otevření selže, evidentně není připojeno k
terminálu a nemusí se odpojovat.
To by částečně vysvětlovalo proč /dev/tty
není symbolický odkaz na ovládací terminál:podporoval by další ioctl
a nemusí existovat řídicí terminál (ale proces se může vždy pokusit o přístup k /dev/tty
). Dokumentace je však nesprávná:další ioctl
není přístupný pouze přes /dev/tty
(viz odpověď mosvyho, která také poskytuje rozumnější vysvětlení povahy /dev/tty
).
/dev/tty
může představovat různé ovládací terminály, aniž by to bylo spojení, protože ovladač, který to implementuje, určuje, jaký je ovládací terminál volajícího procesu, pokud existuje.
Můžete si to představit jako /dev/tty
je řídicím terminálem, a nabízí tak funkcionalitu, která má smysl pouze pro řídicí terminál, zatímco /dev/pts/2
atd. jsou prosté terminály, z nichž jeden může být řídícím terminálem pro daný proces.