我想分叉3个子进程并让每个进程执行一个函数并忙于等待它们完成。第三个过程是倒数计时器,所以一旦运行时间达到0,我将使用IPC告诉其他进程退出。我已经编写了除IPC部分之外的函数并且它们单独运行但是我不能让fork()为每个执行特定函数创建3个子进程。
int main(int argc, char *argv[]) {
pid_t child_onepid, child_twopid, child_threepid, pid;
for (i = 0; i < 3; ++i) {
pid = fork();
if (pid) {
continue;
} else if (pid == 0 && i == 0) {
show_time();
} else if (pid == 0 && i == 1) {
show_uptime();
} else if (pid == 0 && i == 2) {
show_timer(runtime);
} else {
printf("fork error\n");
exit(1);
}
}
return EXIT_SUCCESS;
}
这是我的输出
Time: 06/28/2014 18:55:57PM
Timer: 00:09
>Timer: 00:09
6:55pm up 171 day(s), 10:49, 17 users, load average: 0.34, 0.38, 0.43
6:55pm up 171 day(s), 10:49, 17 users, load average: 0.34, 0.38, 0.43
答案 0 :(得分:2)
您的代码对我来说很好,除非您的错误测试永远不会出现,因为if(pid)
会在-1
上触发。
除此之外,你是否确定你的函数没有返回然后绕过他们自己的for循环副本,这将解释输出...所以我添加了一些break
以确保这一点
但我没有测试过代码。
int main(int argc, char *argv[]) {
pid_t pid;
for (int i = 0; i < 3; ++i) {
pid = fork();
if (pid == -1) {
perror("fork error\n");
exit(EXIT_FAILURE);
} else if (pid > 0)
continue;
} else if (i == 0) {
show_time();
break;
} else if (i == 1) {
show_uptime();
break;
} else if (i == 2) {
show_timer(runtime);
break;
}
}
return EXIT_SUCCESS;
}