pty和管道之间的区别

kpr*_*ipe 10 terminal pipe pty

我一直在阅读这个页面的例子中的ptys:http://rachid.koucha.free.fr/tech_corner/pty_pdip.html.我有两个问题:

  • 使用pty和使用管道有什么区别或最重要的区别?从我所读到的,两者都是用于进程间通信,但是通过pty,进程可以"像对待普通终端一样对待它".那是什么意思?

  • 什么是"控制终端"?我读过他们但却无法理解他们到底是什么.控制终端总是分配给流程的pty吗?

Han*_*Lub 14

你提到的文章很好,很难改进,但它很技术性.我会尝试给出一个不太技术性的解释(跟我一起,Unix大师!)

仅仅是一个单向数据通道:它只能在一端被写入,并且在另一读出.对于双向进程间通信,您总是需要两个管道.管道非常适合移动钻头,但不是很多.

PTY(伪终端)可以被读出和写入的两端,但它不仅是一个双向数据信道等等.要理解这一点,看看真正的终端是很有用的:一端有一个进程读取击键并将字符发送到电传打字机或屏幕.另一方面,有一个真正的人在敲打键盘并盯着上面提到的屏幕.只有一端有文件描述符,另一端只是一个连接器和一根电缆.

从历史上看,终端已经开发了许多可以由其上运行的程序控制的属性(如"回声模式"或"规范模式",参见termios (3))此外,终端可以让用户(通过上述连接器和电缆) )发送可用于"作业控制"的信号,例如通过键入CTRL-Z将前台作业放入后台.

A pty就像一个真正的终端,其中两端都是文件描述符:

  • 从动端的行为完全像一个真正的终端:具有用于从端部("劣处理")的描述符的方法可以读取和写入,但也设置终端attibutes像回波模式或中断字符(例如CTRL + C).它通常甚至不会意识到没有连接到真正的屏幕和键盘.

  • 主动端看起来更像是一个键盘和电传使用,而不是人类,而是由其他进程:已经打开了该主控端任何进程都可以写微博,并会收到回音(但前提是劣质进程设置ECHO属于奴隶).它也可以(在大多数现代unices上)控制具有slave作为其控制终端的会话,例如通过发送CTRL + Z.

为了理解控制终端是什么,考虑真实用户在真实终端登录的场景再次有用.用户可以启动"会话",即一组进程,其中一些在前台作业,另一些在后台.

为了防止混乱,控制终端(即与之关联的内核结构)会跟踪前台或后台作业中的哪些进程,以及允许哪些进程读取和写入进程.每当进程尝试非法操作(如从控制终端读取的后台进程)时,操作将失败(with EIO),然后整个作业被内核停止(使用信号SIGTTIN)

这表明,就像真正的终端一样,只有pty的slave端可以作为控制终端,并且这个概念在支持作业控制的Unix系统上才有意义(现在任何Unix系统)