who
コマンドを使用すると、常にptsとttyが表示されますが、それらの違いを理解できません。誰かがこれを説明してくれませんか?
ttyはネイティブの端末デバイスであり、バックエンドはハードウェアまたはカーネルでエミュレートされます。
pty(疑似端末デバイス)は、他のプログラムによってエミュレートされる端末デバイスです(例:xterm
、screen
、またはssh
はそのようなプログラムです)。 ptsは、ptyのスレーブ部分です。
(詳細は_man pty
_にあります。)
短い要約:
ptyは、posix_openpt()
(通常、特別なデバイス_/dev/ptmx
_を開く)を介してプロセスによって作成され、構成されます双方向の文字デバイスのペアによる:
この呼び出しを通じてこのプロセスによって取得されたファイル記述子であるマスター部分は、端末をエミュレートするために使用されます。いくつかの初期化の後、2番目の部分はunlockpt()
を使用してロック解除でき、マスターはこの2番目の部分(スレーブ)への文字の送受信に使用されます。
ファイルシステムに_/dev/pts/x
_(実際の名前はptsname()
を介してマスターから取得できます)としてアンカーされているスレーブ部分は、ネイティブ端末デバイス(_/dev/ttyx
_)のように動作します。ほとんどの場合、シェルを制御端末として使用するシェルが開始されます。
tty
は通常の端末デバイス(サーバーのコンソールなど)です。
A pts
は、疑似端末スレーブ(xterm
またはssh
接続)です。
man pts
には、疑似端末の詳細な説明があります。