擬似端末

擬似端末とは



擬似端末(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の一種です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。