擬似
端末(pseudo terminal)とは、
UNIX系オペレーティングシステムにおいて、テキスト
端末の機能を提供する仮想的なデバイスです。物理的な
端末装置(仮想コンソール、
シリアルポートなど)を直接使用する代わりに、ソフトウェアがその役割を代行します。具体的には、マスターデバイスとスレーブデバイスのペアとして機能し、
プロセス間の通信を可能にします。
例えば、SSHでリモートサーバーにログインした際、またはターミナルエミュレータ(xtermなど)を使用している際に、この擬似
端末が利用されています。これらの環境下では、物理的な
端末に接続されているかのように操作できますが、実際にはソフトウェアによって制御されています。
擬似端末の生成
擬似
端末は、通常のファイルシステムと同様に、特別なデバイスファイルを通じて生成されます。
プロセスは利用可能なマスターデバイスファイルを開くことで、擬似
端末の利用を開始できます。この際、マスターデバイスのファイルディスクリプタが
プロセスに返されます。
具体的な生成方法は、システムによって異なりますが、多くのシステムではライブラリ関数(例:BSD
UNIXにおける`openpty(3)`)が提供されており、これを利用することで容易に擬似
端末を生成できます。ライブラリ関数は、利用可能なマスターデバイスファイルを開き、対応するスレーブデバイスの権限を初期化する役割を担います。
擬似端末の種類
擬似
端末には、主に以下の2つの種類があります。
1.
BSD PTY
- 伝統的な
UNIXシステムで利用されてきた方式です。
- マスターデバイスファイル(例:`/dev/ptypa`)と、対応するスレーブデバイスファイル(例:`/dev/ttypa`)がペアで使用されます。
- ライブラリ関数は、これらのデバイスファイルに対応するディスクリプタを返し、スレーブデバイスの権限を確立します。
- 一般的に、既に開かれているマスターデバイスは開くことができません。
2.
Unix98 PTY
- System V系のシステムで採用されている比較的新しい方式です。
- multiplexerデバイス(通常`/dev/ptmx`)を通じてマスターデバイスを割り当てます。
- スレーブデバイスは`/dev/pts/1`のような形式で生成されます。
- BSD PTYとは異なり、マスターデバイスの割り当てに競合がなく、同時に開ける数に制限がないため、現在ではより一般的に利用されています。
擬似端末の応用例
擬似
端末は、様々なアプリケーションで利用されています。以下に主な例を挙げます。
端末エミュレータ:
- X Window Systemの`xterm`や、macOSのターミナルアプリケーションなどが代表的です。
- 端末エミュレータのプロセスはマスターデバイスに接続され、シェルはスレーブデバイスに接続されます。
- ユーザーのキーボード入力やマウス操作は、端末エミュレータを通じてシェルに伝えられます。
- また、端末のリサイズやリセットなどの操作も、端末エミュレータ自身が処理します。
リモートログインハンドラ:
- SSHやtelnetサーバーなどのリモートログインサービスは、擬似
端末を利用して、クライアントとのインタラクティブな通信を実現します。
- リモートサーバー上で実行されるシェルは、擬似
端末のスレーブデバイスに接続され、あたかもローカル
端末で操作しているかのような感覚で利用できます。
自動化ツール:
- `expect`のような自動化ツールも、擬似端末を利用しています。
- プログラムの入出力を制御するために擬似端末を使用することで、サブプロセスがユーザーではなくプログラムによって制御されていることを隠蔽できます。
- これにより、端末に依存する様々なサブプロセスの自動化が可能になります。
関連事項
仮想コンソール: `/dev/tty1`などのデバイスファイルに対応する、物理的なテキスト
端末の機能を提供するデバイスです。
*
tty: 端末デバイス全般を指す用語であり、擬似
端末もttyの一種です。