C fork为3个函数提供3个子进程
我想分叉3个子进程,让每个进程执行一个函数,然后等待它们完成。第三个进程是一个倒计时计时器,因此一旦运行时达到0,我将使用IPC通知其他进程退出。除了IPC部分之外,我还编写了一些函数,它们单独运行,但我无法让fork()创建3个子进程来分别执行一个特定的函数C fork为3个函数提供3个子进程,c,fork,C,Fork,我想分叉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) {
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;
}
您的代码在我看来很好,除了您的错误测试永远不会命中,因为
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;
}
intmain(intargc,char*argv[]){
pid_t pid;
对于(int i=0;i<3;++i){
pid=fork();
如果(pid==-1){
perror(“fork error\n”);
退出(退出失败);
}否则,如果(pid>0)
继续;
}else如果(i==0){
显示时间();
打破
}else如果(i==1){
显示正常运行时间();
打破
}else如果(i==2){
显示计时器(运行时);
打破
}
}
返回退出成功;
}
您可能想使用perror(“fork error”)代码>而不是printf(“fork error\n”)代码>。如何分叉进程以使它们同时运行?现在,如果我运行show_time(),它会每秒打印一些内容,但是show_uptime和show_timer在show_time完成之前不会打印。我需要他们每秒钟都打印一些东西。我尝试了wait(&status)和waitpid(pid,NULL,0)。
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;
}