协同进程 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 及其使用技巧,可以参考以下资源:

这些资源将为你提供全面的知识,帮助你更好地掌握协同进程及其在 Unix 系统中的应用。想象一下,当你能够熟练地运用这些知识,处理复杂的进程连接和数据处理,将会多么方便高效!

你是否也曾因为复杂的 shell 语法而头疼不已?那么这些资源将是你最好的帮手,让你的学习之路更加轻松有趣!