【发布时间】:2020-11-07 18:59:16
【问题描述】:
我还是操作系统领域的新手。目前我正在尝试在 C 中实现一个 shell,主要功能之一是管道的能力。我的问题是: 在执行 fork dup 和其他需要的过程之后,如果我有多个参数,我应该如何在 execl 中编写。例如,一旦我将有一个管道 3 个进程,例如 sth |某事 | sth 其他时候有两个喜欢的 sth |某事
【问题讨论】:
标签: c shell operating-system execl
我还是操作系统领域的新手。目前我正在尝试在 C 中实现一个 shell,主要功能之一是管道的能力。我的问题是: 在执行 fork dup 和其他需要的过程之后,如果我有多个参数,我应该如何在 execl 中编写。例如,一旦我将有一个管道 3 个进程,例如 sth |某事 | sth 其他时候有两个喜欢的 sth |某事
【问题讨论】:
标签: c shell operating-system execl
假设您有像ls | wc 这样的简单管道。它可能会像这样可视化:
每个程序都需要一个单独的子进程,由主 shell 进程中的fork 创建。然后,每个子进程都会像往常一样调用exec。
一般来说,对于包含n 程序的管道,您需要n 进程和n - 1 管道。可以泛化并放入循环中。
【讨论】:
exec 函数就像您通常对您的shell 尝试运行的任何其他程序所做的那样。