Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用fork()在C中运行3个命令?_C_Pipe_Fork_Execvp - Fatal编程技术网

如何使用fork()在C中运行3个命令?

如何使用fork()在C中运行3个命令?,c,pipe,fork,execvp,C,Pipe,Fork,Execvp,我必须实现同时(并发)运行一定数量的可执行文件(如grep、echo等)的代码。可执行文件将以字符串的形式给出,我已经对其进行了解析。代码的要求是,一个可执行文件的输出是另一个可执行文件的输入 我试图理解当有奇数个可执行文件时如何实现这一点。据我所知,fork函数将复制手头的代码。如果我将我的代码放在如下位置: for(int I=0; I<3; I++){ pid_t pid = fork(); } for(inti=0;I会发生什么 1) parent creates 3

我必须实现同时(并发)运行一定数量的可执行文件(如grep、echo等)的代码。可执行文件将以字符串的形式给出,我已经对其进行了解析。代码的要求是,一个可执行文件的输出是另一个可执行文件的输入

我试图理解当有奇数个可执行文件时如何实现这一点。据我所知,fork函数将复制手头的代码。如果我将我的代码放在如下位置:

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

for(inti=0;I会发生什么

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;
}