我是这个子父进程的新手。并且喜欢创建一个Master和3个奴隶。这些是一回事吗?如果我创造3个孩子,它会像3个奴隶吗?我的另一个问题是我已经创造了3个孩子。但我坚信这些子进程并不是并行的。我必须使它们并行运行。我相信这个for循环是不允许的?如何以其他方式实现并行运行的三个从属服务器,他们正在完成工作?我实现它的方式,总是像奴隶1完成,然后奴隶2完成。但我的教授问我,他们应该能够以随机顺序完成。我认为我的代码子进程在前一个子代码完成时会创建另一个子进程。
for(int i=0; i<3; i++){
pid_t slave = fork();
if (slave==0) /* only execute this if child */
{
std::cout << "Slave " << i+1 << ": ";
switch(i+1){
case 1 :
std::cout << "Project statistics" << std::endl;
break;
case 2 :
std::cout << "Midterm statistics" << std::endl;
break;
case 3 :
std::cout << "Final statistics" << std::endl;
break;
default :
std::cout << "Something Went Wrong" << std::endl;
}
foo("Child");
std::cout << "Slave " << i+1 << ": Done" << std::endl;
exit(0);
}
wait(&status); /* only the parent waits */
}
答案 0 :(得分:0)
你需要移除wait(&status)
才能使它同时工作(这将为孩子产生另一个孩子之前)。然后添加到另一个循环以获取状态。
即。代码应该是
for (int i=0; i<3; i++) {
pid_t slave = fork();
if (slave==0) /* only execute this if child */
{
std::cout << "Slave " << i+1 << ": ";
switch (i+1) {
case 1 :
std::cout << "Project statistics" << std::endl;
break;
case 2 :
std::cout << "Midterm statistics" << std::endl;
break;
case 3 :
std::cout << "Final statistics" << std::endl;
break;
default :
std::cout << "Something Went Wrong" << std::endl;
}
foo("Child");
std::cout << "Slave " << i+1 << ": Done" << std::endl;
exit(0);
}
}
for (int i=0; i<3; i++) {
wait(&status);
}