GNU/Linux >> Tutoriels Linux >  >> Linux

Quelles relations existe-t-il entre le terminal de contrôle actuel et `/dev/tty` ?

Sur Lubuntu 18.04, j'exécute un shell dans lxterminal. Son terminal de contrôle est le pseudo-terminal esclave courant :

$ tty
/dev/pts/2

Je voudrais savoir quelles sont les relations entre mon terminal de contrôle actuel /dev/pts/2 et /dev/tty .

  1. /dev/tty agit comme mon terminal de contrôle actuel /dev/pts/2 :

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
  2. Mais ils semblent être des fichiers sans rapport, au lieu que l'un soit un lien symbolique
    ou un lien physique vers l'autre :

    $ 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
    

Pour différentes sessions avec différents terminaux de contrôle, si
/dev/tty est garanti d'être leurs terminaux de contrôle. Comment peut-il être
différents terminaux de contrôle, sans être un lien symbolique ou
un lien dur ?

Quelles sont donc leurs relations et leurs différences ? Toute aide est très appréciée !

Ce message provient d'un précédent. Est-ce que la sortie de la commande `tty` et le fichier `/dev/tty` font tous deux référence au terminal de contrôle du processus bash actuel ?

Réponse acceptée :

Le tty La page de manuel de la section 4 revendique ce qui suit :

Le fichier /dev/tty est un fichier de caractères avec le numéro majeur 5 et le numéro
mineur 0, généralement de mode 0666 et propriétaire.groupe root.tty. C'est un
synonyme de terminal de contrôle d'un processus, le cas échéant.

En plus de ioctl(2) requêtes prises en charge par le périphérique auquel tty
fait référence, le ioctl(2) demander TIOCNOTTY est pris en charge.

TIOCNOTTY

Détachez le processus appelant de son terminal de contrôle.

Si le processus est le leader de la session, alors SIGHUP et SIGCONT les signaux
sont envoyés au groupe de processus de premier plan et tous les processus de la
session en cours perdent leur tty de contrôle.

Cet ioctl(2) call ne fonctionne que sur les descripteurs de fichiers connectés à /dev/tty . Il est utilisé par les processus démons lorsqu'ils sont invoqués par un
utilisateur sur un terminal. Le processus tente d'ouvrir /dev/tty . Si l'
ouverture réussit, il se détache du terminal en utilisant TIOCNOTTY , tandis que si l'open échoue, il n'est évidemment pas attaché à un
terminal et n'a pas besoin de se détacher.

Cela expliquerait en partie pourquoi /dev/tty n'est pas un lien symbolique vers le terminal de contrôle :il prendrait en charge un ioctl supplémentaire , et il se peut qu'il n'y ait pas de terminal de contrôle (mais un processus peut toujours essayer d'accéder à /dev/tty ). Cependant la documentation est incorrecte :le supplément ioctl n'est pas seulement accessible via /dev/tty (voir la réponse de mosvy, qui donne également une explication plus sensée de la nature de /dev/tty ).

En relation :Modifier les paramètres d'accessibilité sur Mac à l'aide du terminal ?

/dev/tty peut représenter différents terminaux de contrôle, sans être un lien, car le pilote qui l'implémente détermine quel est le terminal de contrôle du processus appelant, le cas échéant.

Vous pouvez considérer cela comme /dev/tty étant le terminal de contrôle, et offrant ainsi des fonctionnalités qui n'ont de sens que pour un terminal de contrôle, alors que /dev/pts/2 etc. sont de simples terminaux, dont l'un peut être le terminal de contrôle d'un processus donné.


Linux
  1. Quelles sont les différences entre lsof et netstat sous Linux ?

  2. Quelle est la différence entre adduser et useradd ?

  3. Quelle est la différence entre ls et l ?

  4. Quelle est la différence entre $(CC) et $CC ?

  5. Quelles sont les différences fonctionnelles entre .profile .bash_profile et .bashrc

Quelle est la différence entre InnoDB et MyISAM ?

Quelle est la différence entre Linux et Unix ?

Quelles sont les différences entre cPanel et WHM ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre unlink et rm ?