我一直在从此页面的示例中阅读有关pty的信息:http : //www.rkoucha.fr/tech_corner/pty_pdip.html。我有两个问题:
使用pty和使用管道之间有什么区别或最重要的区别?根据我的阅读,两者都用于进程间的通信,但值得一提的是,该进程可以“像对待普通终端一样对其进行处理”。这意味着什么?
什么是“控制终端”?我已经阅读了有关它们的内容,但无法理解它们的真正含义。控制终端是否始终分配给该过程?
您提到的文章非常出色,并且难以改进,但是它是技术性的。我将尝试给出较少的技术解释(与我一起,Unix专家!)
甲管仅仅是一个单向数据通道:它只能在一端被写入,并且在另一读出。对于双向进程间通信,您将始终需要两个管道。管道可以很好地移动钻头,但不多。
甲PTY(伪终端)可以被读出和写入的两端,但它不仅是一个双向数据信道等等。为了理解这一点,看一看真实的终端非常有用:一端有一个过程,可以读取按键并将字符发送到电传打字机或屏幕。在另一端,有一个真实的人敲着键盘,盯着上面提到的屏幕。只有一端具有文件描述符,另一端只是连接器和电缆。
从历史上看,终端开发了许多属性,这些属性可以由在其上运行的程序控制(例如“回显模式”或“规范模式”,请参见termios (3)
)。此外,终端可以让用户使用(通过上述连接器和电缆)发送可用于“作业控制”的信号,例如通过键入CTRL-Z将前台作业置于后台。
Apty
就像一个真正的终端,两端都是文件描述符:
的从动端的行为完全像一个真正的终端:具有用于从端部(“劣处理”)的描述符的方法可从存储器读取,并写入到它,但也设置终端attibutes像回波模式或中断字符(例如CTRL + C)。通常甚至不会意识到没有连接到真实的屏幕和键盘。
在主动端看起来更像是一个键盘和电传使用,而不是人类,而是由其他进程:已经打开了该主控端任何进程都可以写微博,并会收到回音(但前提是劣质进程设置ECHO
从属上的属性)。它还可以(在大多数现代的unice上)控制以从属作为其控制终端的会话),例如,通过发送CTRL + Z。
为了理解什么是控制终端,考虑一下真实用户在真实终端上登录的场景也是很有用的。用户可以启动“会话”,即进程的集合,其中一些在前台作业中,其他在后台中。
为了防止混乱,控制终端(即与之关联的内核结构)会跟踪哪些进程处于前台或后台作业中,以及允许哪些进程对其进行读写。每当进程尝试进行非法操作(例如从控制终端读取后台进程)时,操作都会失败(带有EIO
),然后内核将停止整个作业(使用signal SIGTTIN
)。
这表明,与真实终端一样,只有pty的从属端可以作为控制终端,并且该概念仅在支持作业控制的Unix系统(当今的任何Unix系统)上才有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句