Linux端末はどのように機能しますか?

Linux端末はどのように機能しますか?

ターミナルを起動して実行可能ファイルを呼び出すと(単純化のために行ベースであると仮定)、実行可能ファイルからそのコマンドに対する応答を受け取ります。これはユーザーにどのように印刷されますか?端末は似たようなことをしますかpexpect? (出力ポーリング)または何?印刷する出力についてどのように通知しますか?端末でプログラムを起動するには? (Pythonのos.fork()に似ていますか?)端末がどのように機能するのか混乱しています。私はいくつかのターミナルエミュレータで遊んでいましたが、まだこれらのすべての魔法がどのように機能するのか理解していません。 konsole(kde)とyakuake(おそらくkonsoleを使用)のソースを見ていますが、これらすべての魔法がどこで発生するのかわかりません。

答え1

「ターミナルを開くと」xterm、gnome-terminal、lxterm、konsoleなどのターミナルエミュレータプログラムが起動します。

端末エミュレータが最初にすることは擬似端末(しばしばpseudo-ttyまたは減ってptyと呼ばれる)。 ptyはペアですキャラクターデバイスファイル:pty master(ターミナルエミュレータが開く方)とpty Slave(ターミナル内で実行されるプログラムが開かれる方)。ほとんどの最新のスタンドアロンシステムでは、ホストは/dev/ptmx(すべてのターミナルエミュレータが開いている)スレーブユニットはです/dev/pts/NUMBER。擬似端末のカーネルドライバは、各スレーブデバイスのマスターデバイスを制御するプロセスを追跡します。ターミナルエミュレータは次のようにアクセスできます。I/W制御基本デバイスから。

ターミナルエミュレータがプライマリデバイスを開くと、サブプロセス(通常はシェルですが、ターミナルエミュレータを呼び出したユーザーによって決定されます)が開始されます。エミュレータは、プログラムを呼び出す一般的な方法でこれを行います。

  • クロス子プロセス、
  • ファイル記述子0、1、2でスレーブptyデバイス(標準入力、標準出力、エラーストリーム)を開きます。
  • 実装する子プロセスのシェルまたは他のプログラムです。

子プロセス(または他のプロセス)がptyスレーブプロセスに書き込むと、エミュレータはptyマスタープロセスへの入力を確認します。

代わりに、エミュレータがマスターデバイスに書き込むとき、スレーブデバイスの入力として扱われます。

Expectはまったく同じように動作します。 Expectやxtermなどのターミナルエミュレータの違いは、プログラムに提供する入力(スクリプトからキーボードへの入力)を取得する場所と出力を処理する方法(ログファイルまたはパーサーからウィンドウにテキストを描画する)です。

答え2

最初は愚かなターミナルしかありませんでした。最初は実際にはテレタイプ(電気タイプライターに似ていますが紙巻きがある)でしたが(したがって/dev/tty - TeleTYpers)、後で画面+キーボードコンボが登場しました。コンピュータは端末にその文字を書き込むコマンドを返します(つまり、端末にはデフォルトのエコーがなく、コンピュータは端末に入力した内容を書き込むように端末に指示する必要があります)。これが理由の一つです。 Unixの多くは重要です。コマンドがすべて短すぎます。ほとんどの端末はシリアルラインを介して接続されていますが、コンピュータに直接接続されている端末は(少なくとも)1つあります(通常は同じ部屋にあります)。これがコンソールです。少数のユーザーだけが「コンソール」(通常はシングルユーザーモードで使用できる唯一の「ターミナル」)で作業するように信頼されます。

xterm後には、画面とグラフィックススクリーンカード、​​キーボード、マウス、およびXサーバーのみを実行できる単純なプロセッサを備えたグラフィックターミナル(いわゆる「xターミナル」、プログラムと混同しないでください)もありました。これらは独自の計算を実行しないため、Xクライアントは接続されたコンピュータで実行されます。一部にはハードドライブがありますが、ネットワーク経由で起動することもできます。パーソナルコンピュータが安価で強力になる前の1990年代初頭に人気がありました。

後で「インテリジェント」または「インテリジェント」端末が登場しました。スマート端末が可能ですプロセスユーザー入力(文字の挿入、単語の削除の使用、文字の使用、削除などのシェルプロンプトで行を編集Ctrl-WCtrl-HBackspace他人の助けに頼らないでコンピュータから。一方、初期のダムターミナルはこれらのライブライン編集を実行できませんでした。ダム端末では、ユーザーがキーを押すと、端末が生成したキーコードをコンピュータに転送/委任して処理します。処理後、コンピュータは結果を表示するためにダム端末に送り返す。たとえば、キーを押すとコンピュータにCtrl-Wキーコードが送信され、コンピュータはそれを「最後の単語の削除」と解釈します。

xterm「ターミナルエミュレータ」(Windows PhoneやWindows Phoneなどのプログラムで開く「ターミナルウィンドウ」)は、これらのkonsoleスマート端末の機能を模倣しようとします。 (Windows)などのプログラムPuTTYも、これらのスマート端末エミュレータをエミュレートできます。

PCの場合、「コンソール」(キーボード+画面)と「コンピュータ」は1つのデバイスに近く、「仮想端末」(LinuxではAlt + F1〜Alt + F6キー)を使用できますが、これは以前の端末をエミュレートすることもあります。端末。もちろん、Unix / Linuxがますます単一のユーザーが使用しているデスクトップオペレーティングシステムになるにつれて、以前のユーザーがシリアルラインを介して接続された端末を使用していた「コンソール」で、ほとんどの作業を実行できるようになりました。


もちろん、プログラムを起動するのはシェルです。 Cでは、システムコールを使用してfork環境設定を使用して自分自身をコピーし、システムコールを使用してexecこのコピーを実行したいコマンドに変換します。コマンドが完了するまで、シェルは中断されます(コマンドがバックグラウンドで実行されていない場合)。コマンドは次の設定を継承するため標準入力標準出力そして標準エラーシェルでは、このコマンドはターミナル画面に書き込み、ターミナルキーボードから入力を受け取ります。

関連情報