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
.
-
/dev/tty
actúa como mi terminal de control actual/dev/pts/2
:$ echo hello > /dev/tty hello $ cat < /dev/tty world world ^C
-
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
).
/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.