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.
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 (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.
Es gibt grob drei Arten von Nutzungsszenarien für Pseudo-Terminals:
Prinzip des Pseudo-Terminals
/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
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!