GNU/Linux >> Znalost Linux >  >> Linux

Jaké jsou vztahy mezi aktuálním řídicím terminálem a `/dev/tty`?

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 .

  1. /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
    
  2. 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žadavek TIOCNOTTY je podporováno.

TIOCNOTTY

Odpojte volající proces od jeho řídícího terminálu.

Pokud je proces vedoucí relace, pak SIGHUP a SIGCONT 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 ).

Související:Změnit nastavení usnadnění na Macu pomocí terminálu?

/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.


Linux
  1. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  2. Jaké jsou rozdíly mezi lsof a netstat na linuxu?

  3. Jaké jsou rozdíly mezi rdesktop a xfreerdp?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Jaký je rozdíl mezi `su -` a `su --login`?

  3. Jaké jsou funkční rozdíly mezi .profile .bash_profile a .bashrc

  1. Linux – proč `/dev/ptmx` a `/dev/pts/ptmx` nejsou soubory zařízení?

  2. Odkazuje výstup příkazu `tty` a soubor `/dev/tty` na řídicí terminál aktuálního procesu Bash?

  3. Vztah mezi řídicími znaky, signály a terminálem?