a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 83|回复: 0

[综合辅导] Linux辅导:用PipeViewer跟踪长时间操作的进度

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
UNIX 中最巧妙最壮大的功能之一是 shell。shell 比 GUI 高效得多,还可以经由过程编写剧本自动执行良多使命。更好的是,管道操作符可以在呼吁行上组装出专门的轨范。管道按顺序把呼吁毗连起来,前一个呼吁的输出作为后一个呼吁的输入。   常用缩写词  z" d2 u' f  s. m3 |, @
  GUI:Graphical user interface% `7 w1 t% P* o4 `! H0 i5 J
  可是,管道有一个大错误谬误:泥像是黑箱子。如不美观把呼吁毗连在一路,那么只有序列中最后一个呼吁生成的输出能够反映管道的进度。当然,可以在序列中插入 tee,还可以用 tail 查看输出文件的增添,可是这些解决方案都不完美,会把多个阶段的尺度输出 (stdout) 和尺度错误 (stderr) 混在一路。此外,这两个解决方案斗劲粗拙,很可能无法剖明每个轨范所需的计较劲。
' H- i3 w/ w- t; M  当然,可以把复杂的序列分化为多个零丁的轨范,每个轨范有自己的中心输出文件。简直,如不美观但愿搜检每个轨范的结不美观,分化是最理想的体例。编写一个剧本,为每个轨范生成一个数据文件,在每对轨范之间使用数据文件作为输入,以最后的文件作为最终结不美观。可是,这种做法华侈了呼吁行的矫捷性。
% Y  D: U% {6 W) V% L, U. C  我们需要的是一个可以嵌入呼吁行中的进度怀抱工具。理想情形下,可以对每个轨范一再使用这个工具,它应该是开放源码的,可以移植到 Linux? 和 Mac OS X 等多种 UNIX 变体上。8 b1 _- G4 J' J& v! L  A9 m. \
  好了,不必再盼愿了:Pipe Viewer (pv) 就是这样的工具。它由系统打点员 Andrew Wood 编写,经由其他良多开发人员改良,前后历时四年。它供给了探察呼吁行管道的能力。它的 项目页面 上说,pv “可以插入管道中两个历程之间,从而显示传递数据的速度、已经破耗的时刻以及残剩时刻。” 更惹人注目的是,可以在统一个呼吁行中插入多个 pv 实例以显示相对吞吐量。% K! ^3 G' E. z  y. [* H
  本文介绍若何在 UNIX 系统上构建 pv,以及若何在简单和复杂的呼吁行组合中应用它。可是,我们首先回首回头回忆一下管道毗连历程的体例。& `; X2 z# W! k9 X
  UNIX 管道:历程的毗连4 j, }( ~/ W+ z- b4 |- h
  
8 q% M% C, ]* @' _$ T' \& ?: C7 _$ Z  首先,在第一阶段,初始历程从尺度输入 stdin 篡夺数据,把输出写到 stdout,把错误发送到 stderr。stdin、stdout 和 stderr 都是文件描述符,即文件的句柄。文件句柄上的每个操作(例如 open、read、write、rewind、truncate 和 close)影响文件的状况。6 K9 |" N: p: T# o: F$ s  ~
  接下来,在第二阶段,初始历程建树一个管道。管道由一个队列和两个文件描述符(一个用于数据入列,另一个用于数据出列)组成。管道是祖先先出 (FIFO) 数据结构。" {! H& }: P/ r8 J& U
  管道自己没什么用;它的浸染是毗连数据生成者和数据消费者。是以,初始历程在第三阶段生成就建树)第二个历程,它作为数据消费者。; J0 u6 s0 M% ]7 h- P' z
  在第四阶段(假设新的历程是消费者),原本的历程把它的 stdout 替代为管道的生成者端,让刚生成的历程毗连管道的消费者端,以它作为自己的 stdin。经由这些调整之后,原本的历程(此刻的生成者)执行的每个 write 操作都进入队列,然后由新历程(此刻的消费者)篡夺。  \' b' H8 F% x$ b
  在使用呼吁行管道操作符 (|) 毗连两个适用轨范时,shell 就是采用第一到第四阶段这样的过程,可是 shell 为每个适用轨范生成新历程,其自己并不执行功课节制。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 11:24 , Processed in 0.239150 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表