Linux PTYとは何ですか

藏色散人
リリース: 2023-04-20 10:34:06
オリジナル
2664 人が閲覧しました

linux ptys は Linux 擬似端末を指し、擬似端末はキャラクター デバイスのペア、擬似端末マスターと擬似端末スレーブを指します。スレーブは、「」内のファイルに対応します。 /dev/pts/" ディレクトリ。マスターはメモリ内のファイル記述子として識別され、擬似端末はユーザー モードで実行されるアプリケーションである端末エミュレータによって提供されます。

Linux PTYとは何ですか

#このチュートリアルの動作環境: 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 などのグラフィカル インターフェイスを備えたターミナル シミュレーション ソフトウェア。キーボードやマウスのイベントをテキスト入力に変換し、出力内容をグラフィカルに表示します。

  • リモート シェル アプリケーション (sshd など) は、クライアント上のリモート端末とサーバー上の疑似端末の間で入出力を中継します。
  • screen や tmux などの Muxer アプリケーション。これらは、入力と出力をある端末から別の端末に中継し、テキストモード アプリケーションを実際の端末から切り離します
  • Linux ではなぜ擬似端末の概念が提案されているのでしょうか? 毛織物?シェルなどのコマンド ライン プログラムは、モニターやキーボードからデータを直接読み取ることはできませんか?

同じ画面上で複数の端末エミュレータを実行し、リモート ログインを実現するには、実際にはシェルに擬似端末層を直接通過させることはできません。オペレーティング システムの主要な概念である仮想化の指針の下では、複数の仮想端末を複数の端末エミュレータとリモート ユーザーに割り当てる必要があります。上の図でシェルが使用するスレーブ側は仮想化された端末です。マスター側はユーザー側のインタラクションをシミュレートします。仮想化端末と呼ばれる理由は、データ フローを転送するだけでなく、見た目も端末のように見えるためです。
擬似ターミナルの原理

擬似ターミナルは本質的に、ユーザー モードで実行されるターミナル エミュレーターによって作成される 1 対のキャラクター デバイスです。スレーブは /dev/pts/ ディレクトリ内のファイルに対応し、マスターはメモリ内のファイル記述子 (fd) として識別されます。擬似端末の場合、重要な点は、ソフトウェア エミュレーション端末プログラムがユーザー空間で実行されることです。これが擬似端末と端末の本質的な違いです。以下の図を参照してください:

Linux PTYとは何ですか

/dev/ptmx はキャラクター デバイス ファイルです。プロセスが /dev/ptmx ファイルを開くと、プロセスはそのファイルへのポインタも取得します。擬似端末マスター (ptm) ファイル記述子と擬似端末スレーブ (pts) デバイスが /dev/pts ディレクトリに作成されます。 /dev/ptmx ファイルを開くことによって取得される各ファイル記述子は、独自の関連付けられた pts を持つ独立した ptm です。ptmx (メモリ内に ptmx オブジェクトがあると考えることができます) は、ファイル記述子と pts を内部的に維持します。関係により、このファイル記述子への読み取りと書き込みは、ptmx によって対応する pts に転送されます。 lsof コマンドを使用して、ptmx によって開かれたファイル記述子を表示できます。

$ sudo lsof /dev/ptmx
ログイン後にコピー

プロセスのデフォルトIO

一般に、リモート接続を通じてコマンドを実行すると、プロセスの標準入力、標準出力、および標準エラー出力が擬似端末にバインドされます。デモ プログラム:

#
#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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート