|
|
第 1 帖 | |
|
|
标题: 如何把一个命令的输出放进多个管道里去,并让那些管道命令并行化[深刻理解重定向] rt
__________________
IBOX, a LiveCD distribution based on Gentoo, is fit for newbie. IBOX brings to you: - knoppix-style harddisk installation tool, by which you can install Gentoo in 20 minutes. - hardware auto-configuration. You can run into X desktop directly. - all-round software set, including OpenOffice, azureus. - LiveCD-create-tools. Step-by-step, custom a LiveCD yourself with ease. Any questions and feedbacks is welcome to home_king at 163 dot com |
|
|
|
|
|
|
|
第 2 帖 | |
|
|
在ksh里有协进程这么一个概念,不知道你指的是否是这个? :ask
|
|
|
|
|
|
|
|
第 3 帖 | ||
|
|
引用:
我举个例子,它的作用是用来并行解压缩某一个目录所有的压缩包。 代码:
此帖于 04-04-02 20:45 被 home_king 编辑. |
||
|
|
|
||
|
|
第 4 帖 | |
|
|
另外,bash还有进程替换的概念。
对进程的输入为>(list),对进程的输出为<(list) 举例如下: cmp <(prog1) <(prog2) 该命令通过命名管道把两个程序的输出连接倒cmp的输入中,比较它们的差别。 不过好像都不符合我的要求。 |
|
|
|
|
|
|
|
第 5 帖 | |
|
|
协进程据我所知,是ksh独有的!不信你可以看看别的shell的文章,看是否有所提及?
|
|
|
|
|
|
|
|
第 6 帖 | ||
|
|
引用:
代码:
|
||
|
|
|
||
|
|
第 7 帖 | |
|
|
恕在下愚昧,我理解的使用协进程可以减少进程数量,从而提高工作效率,是通过>&p,<&p的operator来实现多个进程协同处理,再和exec结合才得以实现(ksh),典型例子见:
http://www.linuxsir.org/bbs/showthre...threadid=29701 之<<一个小计算器脚本 >> |
|
|
|
|
|
|
|
第 8 帖 | |
|
|
很明显,我们的理解偏差很大!,我能力有限,仅此而已!望见谅!
![]() |
|
|
|
|
|
|
|
第 9 帖 | |
|
|
我不太理解home_king所说的的“并行解压缩”的概念。能否解释一下你的例子是如何实现的呢? 我想我的问题是for loop是在tar命令完成后还是一个文件tar着呢就for到下一个文件呢?
__________________
15" C2D MBP. 有简单的,不用复杂的!看到复杂的,尽量简单化! Unix/Linux Philosophy: Be small! Be concentrated! One program does one thing and do it perfectly! ∞ years - 宇宙中最后的物质 Proton heat death. 之后,宇宙将以纯能量的形式永远存在。。。一切皆空 |
|
|
|
|
|
|
|
第 10 帖 | |
|
|
不知这种算不算是管道并行呢:
cat < data1 > data2 将 data1中的内容导出同时导入到另一个文件。但是用的不同的文件描述符吧。 |
|
|
|
|
|
|
|
第 11 帖 | ||
|
|
引用:
使用了bash的wait来等待每个放进后台的解压缩进程的结束,以免出现"孤儿进程",并协调它们的并行操作。在超线程或多CPU架构上,这样的协同进程是高效的。 此帖于 04-04-03 15:07 被 home_king 编辑. |
||
|
|
|
||
|
|
第 12 帖 | ||
|
|
引用:
但即使是双向,正如我上面提及的"替换进程"概念,也是很难实现的。尤其把同一个输出放进多管道中去。(注意,这样cmd1|cmd2只是一个单管道) |
||
|
|
|
||
|
|
第 13 帖 | |
|
|
bash的很多特性是仿效ksh的,当然还有它自己的一些新特性,就协进程而言,bash目前还没有实现。
楼主所举例子的只是一个循环,然后在循环中丢一些后台命令跑,仅仅是并行处理而已。就目前所知只有ksh有专门的协处理命令。bash可以用命名管道实现,不过有些繁琐,不如ksh简洁易读。 另外,能否请楼主解释一下什么是多管道运行? 请问有几个程序产生输出,又有几个程序处理这些输出? 最好举例说明一下。 |
|
|
|
|
|
|
|
第 14 帖 | |
|
|
的确,现在bash的协同进程不好。It works like chaos!
比如说有一个命令command1,要求它产生的输出不能保存为文件,并同时用两个过滤命令command2与command3来处理它的输出。 此帖于 04-04-03 09:39 被 home_king 编辑. |
|
|
|
|
|
|
|
第 15 帖 | ||
|
|
引用:
|
||
|
|
|
||