GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welche Beziehungen bestehen zwischen dem aktuellen Steuerterminal und `/dev/tty`?

Auf Lubuntu 18.04 führe ich eine Shell in lxterminal aus. Sein steuerndes Terminal ist der aktuelle Pseudoterminal-Slave:

$ tty
/dev/pts/2

Ich würde gerne wissen, welche Beziehungen zwischen meinem aktuellen steuernden Terminal /dev/pts/2 bestehen und /dev/tty .

  1. /dev/tty verhält sich wie mein aktuelles Kontrollterminal /dev/pts/2 :

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
  2. Aber es scheinen nicht zusammenhängende Dateien zu sein, anstatt ein Symlink
    oder Hardlink zum anderen zu sein:

    $ 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
    

Für verschiedene Sitzungen mit verschiedenen steuernden Terminals, wenn
/dev/tty ist garantiert ihre kontrollierenden Terminals. Wie können
es verschiedene steuernde Terminals sein, ohne ein Symlink oder
Hardlink zu sein?

Was sind also ihre Beziehungen und Unterschiede? Jede Hilfe wird sehr geschätzt!

Dieser Beitrag stammt aus einem früheren. Verweisen sowohl die Ausgabe des Befehls `tty` als auch die Datei `/dev/tty` auf das steuernde Terminal des aktuellen Bash-Prozesses?

Akzeptierte Antwort:

Das tty Manpage in Abschnitt 4 behauptet Folgendes:

Die Datei /dev/tty ist eine Zeichendatei mit der Major-Nummer 5 und der Minor-Nummer 0, normalerweise im Modus 0666 und der Eigentümergruppe root.tty. Es ist ein
Synonym für das steuernde Terminal eines Prozesses, falls vorhanden.

Zusätzlich zu ioctl(2) Anfragen, die von dem Gerät unterstützt werden, auf das sich tty
bezieht, der ioctl(2) Fordern Sie TIOCNOTTY an wird unterstützt.

TIOCNOTTY

Trennen Sie den aufrufenden Prozess von seinem steuernden Terminal.

Wenn der Prozess der Sitzungsleiter ist, dann SIGHUP und SIGCONT Signale
werden an die Prozessgruppe im Vordergrund gesendet und alle Prozesse in der
aktuellen Sitzung verlieren ihre steuernde TTY.

Dieses ioctl(2) Aufruf funktioniert nur bei Dateideskriptoren, die mit /dev/tty verbunden sind . Es wird von Daemon-Prozessen verwendet, wenn sie von einem
Benutzer an einem Terminal aufgerufen werden. Der Prozess versucht, /dev/tty zu öffnen . Wenn das Öffnen
erfolgreich ist, trennt es sich vom Terminal, indem es TIOCNOTTY verwendet , während, wenn das Öffnen fehlschlägt, es offensichtlich nicht mit einem
Terminal verbunden ist und sich nicht trennen muss.

Dies würde teilweise erklären, warum /dev/tty ist kein symbolischer Link zum steuernden Terminal:Es würde ein zusätzliches ioctl unterstützen , und es gibt möglicherweise kein steuerndes Terminal (aber ein Prozess kann immer versuchen, auf /dev/tty zuzugreifen ). Allerdings ist die Dokumentation falsch:der Zusatz ioctl ist nicht nur über zugänglich /dev/tty (Siehe mosvys Antwort, die auch eine vernünftigere Erklärung für die Natur von /dev/tty gibt ).

Verwandt:Ändern Sie die Barrierefreiheitseinstellung auf dem Mac mit dem Terminal?

/dev/tty kann verschiedene steuernde Terminals darstellen, ohne eine Verbindung zu sein, da der Treiber, der es implementiert, bestimmt, welches steuernde Terminal der aufrufende Prozess ist, falls vorhanden.

Sie können sich das als /dev/tty vorstellen das steuernde Terminal ist und somit Funktionen bietet, die nur für ein steuerndes Terminal sinnvoll sind, während /dev/pts/2 usw. sind einfache Terminals, von denen eines das steuernde Terminal für einen bestimmten Prozess sein kann.


Linux
  1. Was ist der Unterschied zwischen InnoDB und MyISAM?

  2. Linux – Warum sind „/dev/ptmx“ und „/dev/pts/ptmx“ keine Gerätedateien?

  3. Verweisen die Ausgabe des Befehls „tty“ und die Datei „/dev/tty“ beide auf das steuernde Terminal des aktuellen Bash-Prozesses?

  4. Beziehungen zwischen Steuerzeichen, Signalen und Terminal?

  5. Was ist der Unterschied zwischen adduser und useradd?

Was ist der Unterschied zwischen Linux und Unix?

Was sind die Unterschiede zwischen cPanel und WHM?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?

Was ist der Unterschied zwischen `su -` und `su --login`?

Was ist der Unterschied zwischen unlink und rm?