繁体   English   中英

为3个功能分叉3个子进程

[英]fork 3 child processes for 3 functions

我想派生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

您的代码对我来说看起来不错,但您的错误测试将永远不会发生,因为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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM