Was ist Linux PTYS?

藏色散人
藏色散人Original
2023-04-20 10:32:532658Durchsuche

linux ptys bezieht sich auf das Linux-Pseudo-Terminal, und das Pseudo-Terminal bezieht sich auf das Zeichengerätepaar, der Pseudo-Terminal-Master und der Pseudo-Terminal-Slave entsprechen einer Datei in „/dev/pts“. /“-Verzeichnis, und der Master wird im Speicher als Dateideskriptor identifiziert; das Pseudo-Terminal wird von einem Terminalemulator bereitgestellt, bei dem es sich um eine Anwendung handelt, die im Benutzermodus ausgeführt wird.

Was ist Linux PTYS?

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

Was ist Linux PTYS?

Linux-Pseudoterminal (pty)

Die Terminals, über die wir oft sprechen, sind in Terminals tty1-6 und Pseudoterminals unterteilt. Bei der Verwendung von tty1-6 wird in der Regel das Linux-System direkt an Tastatur und Monitor angeschlossen oder es werden Virtualisierungslösungen wie die vSphere-Konsole verwendet. In anderen Fällen werden Pseudo-Terminals verwendet. In diesem Artikel werden die Grundkonzepte von Pseudoterminals vorgestellt. Die im Demonstrationsteil dieses Artikels verwendete Umgebung ist Ubuntu 18.04.

Pseudo-Terminal

Pseudo-Terminal (manchmal auch PTY genannt) bezieht sich auf ein Paar Zeichengeräte, Pseudo-Terminal-Master und Pseudo-Terminal-Slave. Der Slave entspricht einer Datei im Verzeichnis /dev/pts/ und der Master wird als Dateideskriptor (fd) im Speicher identifiziert. Pseudoterminals werden von Terminalemulatoren bereitgestellt, bei denen es sich um Anwendungen handelt, die im Benutzermodus ausgeführt werden.

Das Master-Ende ist das Ende, das näher am Monitor und der Tastatur des Benutzers liegt, und das Slave-Ende ist das CLI-Programm (Command Line Interface), das auf dem virtuellen Terminal ausgeführt wird. Der Pseudo-Terminal-Treiber von Linux leitet die von der Master-Seite geschriebenen Daten (z. B. Tastatur) zur Programmeingabe an die Slave-Seite weiter und leitet die vom Programm auf der Slave-Seite geschriebenen Daten zum Lesen an die Master-Seite weiter (Anzeigetreiber). , usw.). Bitte beachten Sie das Diagramm unten (dieses Bild stammt aus dem Internet):

Das von uns geöffnete Terminal-Desktopprogramm, z. B. GNOME Terminal, ist eigentlich eine Terminalsimulationssoftware. Wenn die Terminalemulationssoftware ausgeführt wird, erstellt sie ein Pseudo-Terminal-Master- und Slave-Paar, indem sie die Datei /dev/ptmx öffnet und die Shell auf der Slave-Seite laufen lässt. Wenn der Benutzer eine Tastaturtaste in der Terminalsimulationssoftware drückt, generiert er einen Bytestrom und schreibt ihn an den Master. Der Shell-Prozess kann die Eingabe vom Slave lesen und seine Unterprogramme schreiben den Ausgabeinhalt an den Slave Für das Drucken der Zeichen in das Fenster ist eine Terminalemulationssoftware verantwortlich.

Nutzungsszenarien von Pseudo-Terminals

Es gibt grob drei Arten von Nutzungsszenarien für Pseudo-Terminals:

  • Terminal-Simulationssoftware mit grafischen Oberflächen wie xterm und gnome-terminal konvertiert Tastatur- und Mausereignisse in Texteingabe umwandeln und die Ausgabe grafisch anzeigen
  • Remote-Shell-Anwendungen (wie sshd) leiten Ein- und Ausgaben zwischen einem Remote-Terminal auf dem Client und einem Pseudo-Terminal auf dem Server weiter
  • Multiplexer-Anwendungen wie screen und tmux . Sie leiten Eingaben und Ausgaben von einem Terminal an ein anderes weiter und trennen so Textmodus-Anwendungen vom eigentlichen Terminal. Warum wird das Konzept des Pseudo-Terminals in Linux vorgeschlagen? Können Befehlszeilenprogramme wie Shell Daten nicht direkt vom Monitor und der Tastatur lesen?
Um mehrere Terminalemulatoren auf demselben Bildschirm auszuführen und eine Remote-Anmeldung zu erreichen, können wir die Shell wirklich nicht direkt die Pseudo-Terminal-Schicht passieren lassen. Unter der Führung der Virtualisierung, einer Hauptidee des Betriebssystems, ist es notwendig, mehreren Terminalemulatoren und Remotebenutzern mehrere virtuelle Terminals zuzuweisen. Die von der Shell im Bild oben verwendete Slave-Seite ist ein virtualisiertes Terminal. Die Master-Seite simuliert die Interaktion auf der Benutzerseite. Es wird als virtualisiertes Terminal bezeichnet, da es nicht nur Datenströme weiterleitet, sondern auch wie ein Terminal aussieht.


Prinzip des Pseudo-Terminals

Pseudo-Terminal ist im Wesentlichen ein Paar Zeichengeräte, die von einem Terminal-Emulator erstellt werden, der im Benutzermodus ausgeführt wird. Der Slave entspricht einer Datei im Verzeichnis /dev/pts/ und der Master wird als Dateideskriptor (fd) im Speicher identifiziert. Bei Pseudo-Terminals besteht der entscheidende Punkt darin, dass das Software-Emulation-Terminalprogramm im Benutzerbereich ausgeführt wird. Dies ist der wesentliche Unterschied zwischen ihm und dem Terminal. Bitte beachten Sie das Diagramm unten:

Was ist Linux PTYS?

/dev/ptmx ist eine Zeichengerätedatei. Wenn ein Prozess die Datei /dev/ptmx öffnet, erhält der Prozess gleichzeitig einen Dateideskriptor, der auf den Pseudoterminal-Master (ptm) verweist, und einen Dateideskriptor in der Datei /. dev/pts-Verzeichnis Pseudoterminal Slave (pts) Gerät erstellt in . Jeder durch Öffnen der Datei /dev/ptmx erhaltene Dateideskriptor ist ein unabhängiger PTM, dem ein PTMX-Objekt zugeordnet ist (es kann davon ausgegangen werden, dass sich ein PTMX-Objekt im Speicher befindet), das den Dateideskriptor und die PTS intern verwaltet Beziehung, Lese- und Schreibvorgänge in diesem Dateideskriptor werden von ptmx an die entsprechenden Punkte weitergeleitet. Wir können den von ptmx geöffneten Dateideskriptor über den Befehl lsof anzeigen:

$ sudo lsof /dev/ptmx

Die Standard-E/A des Prozesses

Im Allgemeinen ist es der Standard, wenn wir einen Befehl über eine Remoteverbindung ausführen Die Eingabe des Prozesses, die Standardausgabe und die Standardfehlerausgabe werden an das Pseudoterminal gebunden. Das Folgende ist ein einfaches Demoprogramm:

#include <stdio.h>#include <unistd.h>int main()
{
    printf("PID : %d\n", getpid());
    sleep(200);

    printf("\n");    return 0;
}</unistd.h></stdio.h>

Speichern Sie diesen Code in der Datei mydemo.c und führen Sie dann den folgenden Befehl aus Zum Kompilieren und Ausführen dieses Programms:

$ gcc -Wall mydemo.c -o demo
$ ./demo

Öffnen Sie nun ein anderes Terminal und führen Sie den Befehl lsof aus:

Die Prozesse 0u (Standardeingabe), 1u (Standardausgabe) und 2u (Standardfehlerausgabe) sind alle an das Pseudoterminal /dev/pts/0 gebunden.

Empfohlenes Lernen: „

Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist Linux PTYS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn