void doWork(){
int fd[2];
int pret = pipe(fd);
close(0);
close(1);
int dret = dup2(fd[1], 1);
close(fd[1]);
while(1){
char buf[256];
system("whoami");
int rret = read(fd[0], buf, 256);
if(/* something interesting */){
return;
}
}
}
int main(int argc, char* argv[]){
int children = 2;
for(unsigned work = 0; work < children; ++work){
pid_t pid = fork();
if(pid == 0){
doWork();
break;
}
}
int status;
wait(&status);
return 0;
}
这个例子有什么问题?我试图让每个子进程调用一个外部程序,然后从管道读取该程序的输出。我的代码只适用于儿童设置为1.平行叉管
编辑:我试图用fork/pipes来实现任务并行。父进程和子进程之间没有通信。每个子进程执行一个外部程序,读取输出,处理输出,并继续直到找到所需的输出。
你和几个孩子有什么问题?你能解释一下这种行为吗? – 2011-02-04 15:13:33
我收回之前说过的话。多个子进程运行良好。问题在于,对于多个子进程,程序花费很长时间才能完成,即使它应该更快,但只需一个子进程,只需几秒钟。我在SunOS 5.10上运行它;也许这跟它有关系? – Arlen 2011-02-04 15:44:34