美文网首页
APUE读书笔记-19伪终端(5)

APUE读书笔记-19伪终端(5)

作者: QuietHeart | 来源:发表于2020-10-01 15:05 被阅读0次

查看长时间运行的程序的输出

如果我们有一个程序,那个程序运行很长的时间,我们可以在任何一种标准的shell下面将这个程序简单地放到后台运行。但是,如果我们将这个程序的标准输出重新定向到一个文件中的时候,或者它并不产生许多输出的时候,我们无法方便地检测这个进程,因为标准输入输出库对它的标准输出设置成为了满缓存(标准输出被重新定向成了一个文件,而根据前面,一个文件被标准输入输出库读写的时候会被首先设置成满缓冲的形式)。 我们所能够看到的只是标准输入输出库将成块的输出写到文件中去,可能每块数据的大小达到8,192字节。

如果我们有源代码,我们可以插入fflush调用。另外,我们可以通过pty程序运行这个程序,这样让标准输入输出库以为它的标准输出是一个终端(这样就不会成为满缓冲了)。下面的图形就展示了这个结构,我们将它称为慢输出程序。fork/exec箭头从login shell指向pty进程,箭头是虚线的,用来强调pty进程运行在后台作业当中。

通过伪终端运行慢输出程序

                            +-------------+
                            | output file |
                            +------^------+
                                   |
     +----------+           +------|------+           +----------+
     |  login   |  fork     |     pty     |   fork    | slow out |
     |  shell   |- - - - - ->   process   |---------->|          |
     +--|----^--+  exec     +--|-----^----+   exec    +--|-----^-+
        |    |                 |     |             stdout|     |stdin
        |    |                 |     |             stderr|     |
+- - - -|- - |- - - - - - - - -|- - -|- - - - - - - - - -|- - -|- - - -+
|   +---v----|------+          |     |              +----v-----|----+  |
    |   terminal    |          |     |              |   terminal    |
|   |line discipline|          |     |              |line discipline|  |
    +---|----^------+          |     |              +----|-----^----+
|       |    |                 |     |                   |     |       |
        |    |                 |     |                   |     |         kernel
|   +---v----|------+       +--v-----|----+           +--v-----|--+    |
    |   terminal    |       |    PTY      |           |   PTY     |
|   | device driver |       |   master    |           |   slave   |    |
    +------^--------+       +--|-----^----+           +--|-----^--+
|          |                   |     |                   v     |       |
           |                   v     +<------------------+     |
|          |                   +------------------------------>+       |
+ - - - - -|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
           v
      /---------\
     | user at a |
     |  terminal |
      \---------/

译者注

原文参考

参考: APUE2/ch19lev1sec2.html

相关文章

  • APUE读书笔记-19伪终端(5)

    查看长时间运行的程序的输出 如果我们有一个程序,那个程序运行很长的时间,我们可以在任何一种标准的shell下面将这...

  • APUE读书笔记-19伪终端(15)

    (6)通过非交互的方式驱动交互程序 尽管我们觉得pty可以运行任何协作处理进程(甚至一个协作处理进程是交互的进程)...

  • APUE读书笔记-19伪终端(16)

    (7)pty程序的do_driver函数 通过我们自己写的被pty调用的driver程序,我们可以以任何需要的方式...

  • APUE读书笔记-19伪终端(2)

    2、概述 伪终端的意思是,这个终端对于应用程序来说表现像是一个终端,但是实际上它并不是一个真正的终端。下面的图就展...

  • APUE读书笔记-19伪终端(9)

    (3)基于Linux的伪终端 Linux提供访问伪终端的BSD方法,所以可以使用上面代码中同样的函数在Linux上...

  • APUE读书笔记-19伪终端(14)

    (4)script程序 使用pty程序,我们可以如下通过shell脚本执行script程序: 当我们运行这个she...

  • APUE读书笔记-19伪终端(17)

    远程模式 通过使用ioctl的TIOCREMOTE命令,PTY master可以设置PTY slave为远程模式。...

  • APUE读书笔记-19伪终端(3)

    伪终端的典型应用 我们现在将会看看一些伪终端的典型使用。 网络登录服务 伪终端被编译成支持网络登录的服务。典型的例...

  • APUE读书笔记-19伪终端(8)

    (2)基于BSD的伪终端 在基于BSD的系统中,和基于Linux的系统中,我们提供了自己的XSI函数版本。 在我们...

  • APUE读书笔记-19伪终端(6)

    3、打开伪终端设备 SUS尝试统一的伪终端处理函数 我们打开伪终端设备的方式随平台有所不同。Single UNIX...

网友评论

      本文标题:APUE读书笔记-19伪终端(5)

      本文链接:https://www.haomeiwen.com/subject/uitluktx.html