quais são as relações entre o meu terminal de controle atual e '/ dev / tty'?

6

No Lubuntu 18.04, executo um shell no lxterminal. Seu terminal de controle é o atual escravo pseudoterminal:

$ tty
/dev/pts/2

Gostaria de saber quais são as relações entre meu terminal de controle atual /dev/pts/2 e /dev/tty .

  1. /dev/tty age como meu terminal de controle atual /dev/pts/2 :

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
  2. Mas eles parecem ser arquivos não relacionados, em vez de um ser um link simbólico ou hardlink para o outro:

    $ 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
    

Para sessões diferentes com diferentes terminais de controle, se      /dev/tty é garantido como sendo seus terminais de controle. Como pode     são diferentes terminais de controle, sem ser um symlink ou     hardlink?

Então, quais são as suas relações e diferenças? Qualquer ajuda é muito apreciada!

Esta postagem é originada de uma anterior A saída do comando 'tty' e o arquivo '/ dev / tty' referem-se ao terminal de controle do processo bash atual?

    
por Tim 31.05.2018 / 22:40

1 resposta

8

Isso está documentado na % man_de% página na seção 4 :

The file /dev/tty is a character file with major number 5 and minor number 0, usually of mode 0666 and owner.group root.tty. It is a synonym for the controlling terminal of a process, if any.

In addition to the ioctl(2) requests supported by the device that tty refers to, the ioctl(2) request TIOCNOTTY is supported.

TIOCNOTTY

Detach the calling process from its controlling terminal.

If the process is the session leader, then SIGHUP and SIGCONT signals are sent to the foreground process group and all processes in the current session lose their controlling tty.

This ioctl(2) call works only on file descriptors connected to /dev/tty. It is used by daemon processes when they are invoked by a user at a terminal. The process attempts to open /dev/tty. If the open succeeds, it detaches itself from the terminal by using TIOCNOTTY, while if the open fails, it is obviously not attached to a terminal and does not need to detach itself.

Isso explica em parte porque tty não é um link simbólico para o terminal de controle: ele suporta um /dev/tty adicional, e pode não haver um terminal de controle (mas um processo pode sempre tentar acessar ioctl ) .

/dev/tty pode representar diferentes terminais de controle, sem ser um link, porque o driver que o implementa determina qual é o terminal de controle do processo de chamada, se houver.

Você pode pensar nisso como /dev/tty sendo o terminal de controle e, portanto, oferecendo funcionalidade que só faz sentido para um terminal de controle, enquanto /dev/tty etc. são terminais simples, um dos quais pode ser o terminal de controle para um determinado processo.

    
por 31.05.2018 / 23:34