![在伪终端内运行伪终端](https://linux22.com/image/124818/%E5%9C%A8%E4%BC%AA%E7%BB%88%E7%AB%AF%E5%86%85%E8%BF%90%E8%A1%8C%E4%BC%AA%E7%BB%88%E7%AB%AF.png)
我试图了解程序如何喜欢screen
和script
控制 I/O。
我对终端、tty 等的了解来自于阅读'tty 揭秘'文章,以及我能找到的所有 SE 答案。据我了解,组件之间的交互大致如下:
Console(Keyboard+Screen) ---- xterm(pty master) ----- tty line discipline ---- bash/other programs(pty slave)
其中行规则在内核中,xterm 和 bash 在用户空间中运行。
- 它是否正确?
现在,当我们考虑像这样的程序时screen
,script
,它们是用户空间程序在终端中运行(现有的 xterm),但能够控制其他程序的 I/O。文章提到这是因为他们在 xterm 中运行另一个伪终端(现有的伪终端)。
这是否意味着它们开辟了一个新的
pty
主从对,控制这个新对的主端,并且从它们启动的所有进程都在新的从pty
机上运行?例如,每次我启动一个新的“屏幕”并运行命令时tty
,它都会向我显示不同的/dev/pts/x
.是否script
也以类似的方式运行?最后有人可以向我指出任何文章/书籍,我可以在其中获得有关此内容的更多详细信息(尚未找到任何内容)吗?
我也想参考一下这回答,虽然很简短。
答案1
① 是的,xterm 和 bash 运行在用户空间。屏幕和脚本也是如此。
② 是的,没错。 Screen 基本上是一个终端模拟器,就像 XTerm 一样。当然,XTerm 向 X11 服务器输出命令以显示终端,而 screen 向另一个终端(可以是终端仿真器或实际终端)输出控制序列和文本。
③ 关于这些程序如何工作的最佳细节可能是源代码。当然,欢迎在这里提出有关它们的问题,或者欢迎在堆栈溢出。