在伪终端内运行伪终端

在伪终端内运行伪终端

我试图了解程序如何喜欢screenscript控制 I/O。

我对终端、tty 等的了解来自于阅读'tty 揭秘'文章,以及我能找到的所有 SE 答案。据我了解,组件之间的交互大致如下:

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

其中行规则在内核中,xterm 和 bash 在用户空间中运行。

  1. 它是否正确?

现在,当我们考虑像这样的程序时screen,script,它们是用户空间程序在终端中运行(现有的 xterm),但能够控制其他程序的 I/O。文章提到这是因为他们在 xterm 中运行另一个伪终端(现有的伪终端)。

  1. 这是否意味着它们开辟了一个新的pty主从对,控制这个新对的主端,并且从它们启动的所有进程都在新的从pty机上运行?例如,每次我启动一个新的“屏幕”并运行命令时tty,它都会向我显示不同的/dev/pts/x.是否script也以类似的方式运行?

  2. 最后有人可以向我指出任何文章/书籍,我可以在其中获得有关此内容的更多详细信息(尚未找到任何内容)吗?

我也想参考一下回答,虽然很简短。

答案1

① 是的,xterm 和 bash 运行在用户空间。屏幕和脚本也是如此。

② 是的,没错。 Screen 基本上是一个终端模拟器,就像 XTerm 一样。当然,XTerm 向 X11 服务器输出命令以显示终端,而 screen 向另一个终端(可以是终端仿真器或实际终端)输出控制序列和文本。

③ 关于这些程序如何工作的最佳细节可能是源代码。当然,欢迎在这里提出有关它们的问题,或者欢迎在堆栈溢出

相关内容