如何让3个进程并行运行?以下解决方案是否正确? 在我的解决方案中,我放了一些代码来查看时间,我认为这是在顺序模式下进行调整。我需要同时运行pid1,pid2和pid3。
pid = fork();
if(pid == 0) {
//code...
exit(EXIT_SUCCESS);
} else if(pid > 0) {
pid1 = fork();
if(pid1 == 0) {
//pid1 code...
exit(EXIT_SUCCESS);
} else if(pid1 > 0) {
waitpid(pid1, &status, 0);
} else {
printf("Fork error %d.\n", errno);
}
pid2 = fork();
if(pid2 == 0) {
//pid2 code...
exit(EXIT_SUCCESS);
} else if(pid2 > 0) {
waitpid(pid2, &status, 0);
} else {
printf("Fork error %d.\n", errno);
}
pid3 = fork();
if(pid3 == 0) {
//pid3 code...
exit(EXIT_SUCCESS);
} else if(pid3 > 0) {
waitpid(pid3, &status, 0);
} else {
printf("Fork error %d.\n", errno);
}
waitpid(pid, &status, 0);
}
答案 0 :(得分:4)
在开始下一个孩子之前,你一直在等待一个孩子完成。尝试类似:
for (int i = 0; i < 3; ++i)
{
pid = fork();
if (pid < 0)
error
if (pid == 0)
{
child does thing
exit
}
}
for (int i = 0; i < 3; ++i)
{
wait(&status);
}
修改强>
因此,只需将代码更改为此类代码并在最后等待。
if (pid2 == 0)
{
//pid2 code...
exit(EXIT_SUCCESS);
}
else
if (pid2 < 0)
{
printf("Fork error %d.\n", errno);
}
//....same outline for 3, etc.
答案 1 :(得分:0)
查看我的wrap计划,特别是wrapc
的代码。它要求自己两次,将一个孩子强行插入wrap
,读取,写入wrap
,然后读回另一个孩子。
答案 2 :(得分:0)
您的问题有些模糊 - 您是否看到3个进程并行运行? 编写代码的方式就是让您立即退出子进程。