首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pty与管道的区别

pty与管道的区别
EN

Stack Overflow用户
提问于 2014-10-30 17:29:30
回答 1查看 2.8K关注 0票数 18

我从这个页面的例子中读到了有关ptys的内容:pdip.html。我有两个问题:

  • 使用pty和使用管道有什么区别,或者最重要的区别?据我所读,两者都是为了进程间的交流,但是有了pty,进程就可以“像正常的终端一样对待它”。那是什么意思?
  • 什么是“控制终端”?我读过关于他们的书,但不明白他们到底是什么。控制终端是否总是分配给进程的pty?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 09:16:35

您提到的文章非常优秀,而且很难改进,但它相当技术性。我会尝试给出一个较少技术性的解释(请原谅我,Unix古鲁!)

管道只是一个单向数据通道:只能在一端写入,在另一端读取。对于双向进程间通信,您总是需要两个管道。管道是很好的移动钻头,但没有更多。

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

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

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

  • 从端的行为与真正的终端完全一样:具有从端描述符(“劣进程”)的进程可以读取并写入该进程,但也可以设置终端姿态,如回波模式或中断字符(例如CTRL+C)。它通常不会意识到是没有连接到一个真正的屏幕和键盘。
  • 主端看起来更像是一个键盘和电传打字机,不是供人使用,而是由其他进程使用:任何打开主端的进程都可以写入它,并接收回显(但只有当劣等进程设置了从服务器上的ECHO属性时)。它还可以(在大多数现代单元上)控制以从站作为其控制终端的会话),例如通过发送CTRL+Z。

要理解控制终端是什么,再一次考虑真正的用户登录到真实终端的场景是非常有用的。用户可以启动“会话”,即进程的集合,其中一些在前台作业中,另一些在后台。

为了防止混乱,控制终端(即与其相关联的内核结构)跟踪哪些进程处于前台或后台作业中,哪些进程允许读取和写入。每当进程尝试一些非法的东西(比如从控制终端读取的后台进程),操作就会失败(使用EIO),然后整个作业由内核停止(使用信号SIGTTIN)。

这表明,就像实际的终端一样,只有pty的从端才能成为控制终端,而这一概念只适用于支持作业控制的Unix系统(现在的任何Unix系统)。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26659595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档