伪终端与一对管道

伪终端与一对管道

为什么伪终端是类 Unix 系统上的一个单独功能?是什么让它们在实现终端仿真器方面优于一对管道或 FIFO?

答案1

终端与其他形式的 I/O 不同,终端仿真器需要将自身呈现为终端。

  • 终端(包括伪终端)具有某些属性,例如行长度和支持的控制序列。程序可以询问这些,例如,通常ls会确定其输出是否要发送到终端,然后调整其颜色和制表以匹配终端。

    您可以测试一下:ls | cat不会给您单独的列。伪终端用于为终端仿真器传递适当的值。

    再举个例子,出于安全原因,像sudo和这样的程序ssh会直接从终端读取密码,你不能将它们通过管道输入。

  • 终端用于控制进程。如果您按^C,终端将发送SIGINT它的前台进程。这是终端的工作。这意味着,为了让事情顺利^C进行,必须有一个终端。

    同样,挂起终端(或在现代系统上,关闭终端仿真器的窗口)将发送SIGHUP到与其关联的所有进程。

    伪终端可以处理这个问题,而一对管道则不能。

    一般来说,除了守护进程之外的所有进程都有一个控制终端。您可以使用ps来告诉您哪些进程属于哪些终端。

相关内容