GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué relaciones hay entre el terminal de control actual y `/dev/tty`?

En Lubuntu 18.04, ejecuto un shell en lxterminal. Su terminal de control es el esclavo pseudoterminal actual:

$ tty
/dev/pts/2

Me gustaría saber qué relaciones existen entre mi terminal de control actual /dev/pts/2 y /dev/tty .

  1. /dev/tty actúa como mi terminal de control actual /dev/pts/2 :

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
  2. Pero parecen ser archivos no relacionados, en lugar de que uno sea un enlace simbólico
    o un enlace fijo al otro:

    $ 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 diferentes sesiones con diferentes terminales de control, si
/dev/tty está garantizado que serán sus terminales de control. ¿Cómo puede
ser diferentes terminales de control, sin ser un enlace simbólico o
enlace duro?

Entonces, ¿cuáles son sus relaciones y diferencias? ¡Cualquier ayuda es muy apreciada!

Esta publicación se originó a partir de una anterior. ¿La salida del comando `tty` y el archivo `/dev/tty` se refieren a la terminal de control del proceso bash actual?

Respuesta aceptada:

El tty La página de manual en la sección 4 afirma lo siguiente:

El archivo /dev/tty es un archivo de caracteres con el número mayor 5 y el menor
número 0, generalmente del modo 0666 y propietario.grupo raíz.tty. Es un
sinónimo del terminal de control de un proceso, si lo hay.

Además del ioctl(2) solicitudes admitidas por el dispositivo al que se refiere tty
, el ioctl(2) solicitud TIOCNOTTY es compatible.

TIOCNOTTY

Separe el proceso de llamada de su terminal de control.

Si el proceso es el líder de la sesión, entonces SIGHUP y SIGCONT las señales
se envían al grupo de procesos en primer plano y todos los procesos en la
sesión actual pierden su tty de control.

Este ioctl(2) la llamada solo funciona en descriptores de archivos conectados a /dev/tty . Lo utilizan los procesos daemon cuando son invocados por un usuario
en una terminal. El proceso intenta abrir /dev/tty . Si la
apertura tiene éxito, se separa del terminal usando TIOCNOTTY , mientras que si falla la apertura, obviamente no está conectado a un terminal
y no necesita desconectarse.

Esto explicaría en parte por qué /dev/tty no es un enlace simbólico al terminal de control:admitiría un ioctl adicional , y es posible que no haya una terminal de control (pero un proceso siempre puede intentar acceder a /dev/tty ). Sin embargo, la documentación es incorrecta:el ioctl adicional no solo es accesible a través de /dev/tty (vea la respuesta de mosvy, que también brinda una explicación más sensata de la naturaleza de /dev/tty ).

Relacionado:¿Cambiar la configuración de accesibilidad en Mac usando terminal?

/dev/tty puede representar diferentes terminales de control, sin ser un enlace, porque el controlador que lo implementa determina cuál es el terminal de control del proceso de llamada, si lo hay.

Puedes pensar en esto como /dev/tty ser el terminal de control y, por lo tanto, ofrecer una funcionalidad que solo tiene sentido para un terminal de control, mientras que /dev/pts/2 etc. son terminales simples, uno de los cuales podría ser el terminal de control para un proceso dado.


Linux
  1. ¿Cuál es la diferencia entre InnoDB y MyISAM?

  2. ¿Relaciones entre caracteres de control, señales y terminal?

  3. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?

  4. ¿Cuál es la diferencia entre ls y l?

  5. ¿Cuál es la diferencia entre $(CC) y $CC?

¿Cuál es la diferencia entre Linux y Unix?

Linux – ¿Por qué `/dev/ptmx` y `/dev/pts/ptmx` no son archivos de dispositivo?

¿La salida del comando `tty` y el archivo `/dev/tty` se refieren ambos a la terminal de control del proceso Bash actual?

¿Cuáles son las diferencias entre cPanel y WHM?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?