web-dev-qa-db-ja.com

疑似端末内で疑似端末を実行する

screenscriptなどのプログラムがI/Oをどのように制御するかを理解しようとしています。

ターミナル、ttyなどに関する私の知識は、 'tty demystified' の記事と、私が見つけたすべてのSEの回答を読んだことから得られます。したがって、私が理解していることから、コンポーネント間の相互作用は大まかに次のように機能します。

Console(Keyboard+Screen) ---- xterm(pty master) ----- tty line discipline ---- bash/other programs(pty slave)

ここで、line disciplineはカーネル内にあり、xtermとbashはユーザースペースで実行されます。

  1. これは正しいです?

さて、 screenscript のようなプログラムを考えると、それらは実行されるユーザースペースプログラムです。ターミナル(既存のxterm)で、他のプログラムとの間のI/Oを制御できます。この記事では、xterm内で別の疑似端末(既存の疑似端末)を実行しているため、これについて言及しています。

  1. つまり、新しいptyマスター-スレーブペアを開き、この新しいペアのマスターエンドを制御し、それらから起動されたすべてのプロセスが新しいptyスレーブで実行されるということですか?たとえば、新しい「画面」を開始してttyコマンドを実行するたびに、異なる/dev/pts/xが表示されます。 scriptも同様の方法で実行されますか?

  2. 最後に、誰かが私にこのことについてもう少し詳細を知ることができる記事/本を教えてもらえますか(何も見つけることができませんでした)?

非常に簡単ですが、 this 回答も参照したいと思います。

2
forumulator

①はい、xtermとbashはユーザースペースで実行されます。画面とスクリプトも同様です。

②そうですね。 Screenは基本的に、XTermと同じようにターミナルエミュレータです。もちろん、XTermはX11サーバーにコマンドを出力して端末を表示しますが、画面は制御シーケンスとテキストを別の端末(端末エミュレーターまたは実際の端末)に出力します。

③これらのプログラムがどのように機能するかについての最も良い詳細は、おそらくソースコードでしょう。もちろん、それらについての質問はここで歓迎されます。または、コードの質問は Stack Overflow で歓迎されます。

2
derobert