GNU/Linux >> Linux Esercitazione >  >> Linux

Quali sono le relazioni tra l'attuale terminale di controllo e `/dev/tty`?

Su Lubuntu 18.04, eseguo una shell in lxterminal. Il suo terminale di controllo è l'attuale pseudoterminale slave:

$ tty
/dev/pts/2

Vorrei sapere quali sono le relazioni tra il mio attuale terminale di controllo /dev/pts/2 e /dev/tty .

  1. /dev/tty si comporta come il mio attuale terminale di controllo /dev/pts/2 :

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
  2. Ma sembrano essere file non correlati, invece che uno è un collegamento simbolico
    o un hardlink all'altro:

    $ 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
    

Per sessioni diverse con terminali di controllo diversi, if
/dev/tty è garantito che siano i loro terminali di controllo. Come può
essere diversi terminali di controllo, senza essere un collegamento simbolico o
hardlink?

Allora quali sono le loro relazioni e differenze? Qualsiasi aiuto è molto apprezzato!

Questo post è originato da uno precedente L'output del comando `tty` e il file `/dev/tty` si riferiscono entrambi al terminale di controllo dell'attuale processo bash?

Risposta accettata:

Il tty manpage nella sezione 4 afferma quanto segue:

Il file /dev/tty è un file di caratteri con numero maggiore 5 e numero minore
0, solitamente di modalità 0666 e proprietario.group root.tty. È un
sinonimo del terminale di controllo di un processo, se presente.

Oltre a ioctl(2) richieste supportate dal dispositivo a cui tty
fa riferimento, il ioctl(2) richiedi TIOCNOTTY è supportato.

TIOCNOTTY

Stacca il processo di chiamata dal suo terminale di controllo.

Se il processo è il leader della sessione, allora SIGHUP e SIGCONT i segnali
vengono inviati al gruppo di processi in primo piano e tutti i processi nella
sessione corrente perdono il controllo tty.

Questo ioctl(2) call funziona solo su descrittori di file collegati a /dev/tty . Viene utilizzato dai processi daemon quando vengono invocati da un utente
su un terminale. Il processo tenta di aprire /dev/tty . Se l'
open riesce, si stacca dal terminale utilizzando TIOCNOTTY , mentre se l'apertura fallisce, ovviamente non è collegato a un terminale
e non ha bisogno di staccarsi.

Questo spiegherebbe in parte perché /dev/tty non è un collegamento simbolico al terminale di controllo:supporterebbe un ulteriore ioctl e potrebbe non esserci un terminale di controllo (ma un processo può sempre provare ad accedere a /dev/tty ). Tuttavia la documentazione non è corretta:l'aggiunta di ioctl non è accessibile solo tramite /dev/tty (vedi la risposta di mosvy, che fornisce anche una spiegazione più sensata per la natura di /dev/tty ).

Correlati:modificare l'impostazione di accessibilità su Mac utilizzando il terminale?

/dev/tty può rappresentare diversi terminali di controllo, senza essere un collegamento, perché il driver che lo implementa determina qual è il terminale di controllo del processo chiamante, se presente.

Puoi pensare a questo come a /dev/tty essendo il terminale di controllo, e quindi offrendo funzionalità che hanno senso solo per un terminale di controllo, mentre /dev/pts/2 ecc. sono terminali semplici, uno dei quali potrebbe essere il terminale di controllo per un determinato processo.


Linux
  1. Qual è la differenza tra InnoDB e MyISAM?

  2. Linux – Perché `/dev/ptmx` e `/dev/pts/ptmx` non sono file di dispositivo?

  3. Qual è la differenza tra strtok_r e strtok_s in C?

  4. Qual è la differenza tra adduser e useradd?

  5. Qual è la differenza tra $(CC) e $CC?

Qual è la differenza tra Linux e Unix?

L'output del comando `tty` e il file `/dev/tty` si riferiscono entrambi al terminale di controllo dell'attuale processo Bash?

Relazioni tra caratteri di controllo, segnali e terminale?

Quali sono le differenze tra cPanel e WHM?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?