14.4协同进程UNIX过滤程序从标准输入读取数据,对其进行适当处理后写到标准输出。几个过滤进程通常在shell管道命令中线性地连接。当同一个程序产生某个过滤程序的输入,同时又读取该过滤程序的输出时,则该过滤程序就成为协同进程(coprocess)。Korn Shell提供了协同进程。Bourne shell和C shell并没有提供将进程连接起来按协同进程方式工作的方法。协同进程通常在shell的后台运行,其标准输入和标准输出通过管道连接到另一个程序。

虽然要求初始化一个协同进程,并将其输入和输出连接到另一个进程的shell语法是十分奇特的(详细情况见Bolsky和Korn〔1989〕中的pp.66~66),但是协同进程的工作方式在C程序中也是非常有用的。popen提供连接到另一个进程的标准输入或标准输出的一个单行管道,而对于协同进程,则它有连接到另一个进程的两个单行管道—一个接到其标准输入,另一个则来自标准输出。我们先要将数据写到其标准输入,经其处理后,再从其标准输出读取数据。

实例让我们通过一个实例来观察协同进程。进程先创建两个管道:一个是协同进程的标准输入,另一个是协同进程的标准输出。图14-8显示了这种安排。程序14-8是一个简单的协同进程,它从其标准输入读两个数,计算它们的和,然后将结果写至标准输出。

了解更多关于Korn Shell的内容,可以参考以下资源:

可以更深入地理解Korn Shell的各种功能和用法,以及如何在实际编程中有效利用协同进程技术。