linux ptys は Linux 擬似端末を指し、擬似端末はキャラクター デバイスのペア、擬似端末マスターと擬似端末スレーブを指します。スレーブは、「」内のファイルに対応します。 /dev/pts/" ディレクトリ。マスターはメモリ内のファイル記述子として識別され、擬似端末はユーザー モードで実行されるアプリケーションである端末エミュレータによって提供されます。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux ptys とは何ですか?
Linux 擬似端末 (pty)
よく話題になる端末は、tty1 ~ 6 の端末と擬似端末に分けられます。 tty1-6 を使用する場合は、通常、Linux システムにキーボードとモニターを直接接続するか、vSphere コンソールなどの仮想化ソリューションを使用しますが、それ以外の場合は疑似端末を使用します。この記事では、擬似端末の基本概念を紹介します。この記事のデモ部分で使用した環境は ubuntu 18.04 です。
擬似端末 (pty とも呼ばれる) は、キャラクター デバイスの擬似端末マスターと擬似端末スレーブを指します。スレーブは /dev/pts/ ディレクトリ内のファイルに対応し、マスターはメモリ内のファイル記述子 (fd) として識別されます。疑似端末は、ユーザー モードで実行されるアプリケーションである端末エミュレータによって提供されます。
マスター エンドはユーザーのモニターやキーボードに近い側であり、スレーブ エンドは仮想端末上で実行される CLI (コマンド ライン インターフェイス、コマンド ライン インターフェイス) プログラムです。 Linux 擬似端末ドライバーは、マスター側 (キーボードなど) によって書き込まれたデータをプログラム入力のためにスレーブ側に転送し、スレーブ側のプログラムによって書き込まれたデータを読み取りのためにマスター側に転送します (ディスプレイドライバー、等。)。以下の図を参照してください (この図はインターネットからのものです):
私たちが開くターミナル デスクトップ プログラム。 GNOME ターミナルとして、実際にはターミナル エミュレーション ソフトウェアです。ターミナル エミュレーション ソフトウェアが実行されると、/dev/ptmx ファイルを開いてスレーブ側でシェルを実行することにより、疑似ターミナルのマスターとスレーブのペアが作成されます。ユーザーがターミナル シミュレーション ソフトウェアでキーボード キーを押すと、バイト ストリームが生成され、マスターに書き込まれます。シェル プロセスはスレーブから入力を読み取ることができ、シェルとそのサブルーチンは出力コンテンツをスレーブに書き込みます。端末エミュレーション ソフトウェアは、ウィンドウに文字を出力します。
擬似端末の利用シナリオは大きく分けて 3 種類あります。 ##xterm、gnome-terminal などのグラフィカル インターフェイスを備えたターミナル シミュレーション ソフトウェア。キーボードやマウスのイベントをテキスト入力に変換し、出力内容をグラフィカルに表示します。
同じ画面上で複数の端末エミュレータを実行し、リモート ログインを実現するには、実際にはシェルに擬似端末層を直接通過させることはできません。オペレーティング システムの主要な概念である仮想化の指針の下では、複数の仮想端末を複数の端末エミュレータとリモート ユーザーに割り当てる必要があります。上の図でシェルが使用するスレーブ側は仮想化された端末です。マスター側はユーザー側のインタラクションをシミュレートします。仮想化端末と呼ばれる理由は、データ フローを転送するだけでなく、見た目も端末のように見えるためです。
擬似ターミナルの原理
/dev/ptmx はキャラクター デバイス ファイルです。プロセスが /dev/ptmx ファイルを開くと、プロセスはそのファイルへのポインタも取得します。擬似端末マスター (ptm) ファイル記述子と擬似端末スレーブ (pts) デバイスが /dev/pts ディレクトリに作成されます。 /dev/ptmx ファイルを開くことによって取得される各ファイル記述子は、独自の関連付けられた pts を持つ独立した ptm です。ptmx (メモリ内に ptmx オブジェクトがあると考えることができます) は、ファイル記述子と pts を内部的に維持します。関係により、このファイル記述子への読み取りと書き込みは、ptmx によって対応する pts に転送されます。 lsof コマンドを使用して、ptmx によって開かれたファイル記述子を表示できます。
$ sudo lsof /dev/ptmx
一般に、リモート接続を通じてコマンドを実行すると、プロセスの標準入力、標準出力、および標準エラー出力が擬似端末にバインドされます。デモ プログラム:
##include <stdio.h>#include <unistd.h>int main() { printf("PID : %d\n", getpid()); sleep(200); printf("\n"); return 0; }</unistd.h></stdio.h>
このコードをファイル mydemo.c に保存し、次のコマンドを実行してプログラムをコンパイルして実行します。
$ gcc -Wall mydemo.c -o demo $ ./demo
デモ プログラムは自身のプロセスの PID を出力します。次に、別のターミナルを開いて lsof コマンドを実行します。
$ lsof -p 17981
プロセスの 0u (標準入力)、1u (標準出力) が表示されます。 、2u (標準エラー出力) は擬似端末 /dev/pts/0 にバインドされます。
推奨される学習: 「linux ビデオ チュートリアル 」
以上がLinux PTYとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。