【问题标题】:How to use fork() to run 3 commands in C?如何使用 fork() 在 C 中运行 3 个命令?
【发布时间】:2019-11-15 05:24:03
【问题描述】:

我必须实现同时(并发)运行一定数量的可执行文件(例如 grep、echo 等)的代码。可执行文件将作为我已解析的字符串给出。代码的要求是一个可执行文件的输出是另一个可执行文件的输入。

我试图了解当可执行文件数量为奇数时如何实现这一点。据我所知,fork 函数将复制手头的代码。如果我这样写代码:

for(int I=0; I<3; I++){
     pid_t pid = fork();
}

那么当I==0时,将产生1个孩子。当I==1时,将产生2个孩子,同样,当I==2时,将产生4个孩子。如果我只允许在孩子身上执行(当pid==0 时),我仍然会有 7 次执行,这比我需要的多 4 次。

【问题讨论】:

标签: c pipe fork execvp


【解决方案1】:

会发生什么

1) parent creates 3 children child1(i=0), child2(i=1), child3(i=2)
2) child1 creates 2 children child4 (i=1), child5(i=2)
3) child2 creates 1 child child6 (i=2)
4) child4 creates 1 child child7 (i=2)

要解决这个问题,首先要注意父 pid 是什么

pid_t parent = getpid();

然后创建孩子

for (int i = 0; i < 3; ++ii)
{
    pit_t child = fork();

如果不是父级,则突破

    if (child != parent) break;
}

您现在有一个父母和三个孩子。

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2021-04-06
    • 2012-09-11
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2021-04-26
    • 2019-06-28
    • 1970-01-01
    相关资源
    最近更新 更多