Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fork为3个函数提供3个子进程_C_Fork - Fatal编程技术网

C fork为3个函数提供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) {

我想分叉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;
}

您的代码在我看来很好,除了您的错误测试永远不会命中,因为
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;
}