ターミナルを起動して実行可能ファイルを呼び出すと(単純化のために行ベースであると仮定)、実行可能ファイルからそのコマンドに対する応答を受け取ります。これはユーザーにどのように印刷されますか?端末は似たようなことをしますか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制御基本デバイスから。
ターミナルエミュレータがプライマリデバイスを開くと、サブプロセス(通常はシェルですが、ターミナルエミュレータを呼び出したユーザーによって決定されます)が開始されます。エミュレータは、プログラムを呼び出す一般的な方法でこれを行います。
子プロセス(または他のプロセス)がptyスレーブプロセスに書き込むと、エミュレータはptyマスタープロセスへの入力を確認します。
代わりに、エミュレータがマスターデバイスに書き込むとき、スレーブデバイスの入力として扱われます。
Expectはまったく同じように動作します。 Expectやxtermなどのターミナルエミュレータの違いは、プログラムに提供する入力(スクリプトからキーボードへの入力)を取得する場所と出力を処理する方法(ログファイルまたはパーサーからウィンドウにテキストを描画する)です。