c - 为 3 个函数派生 3 个子进程

标签 c fork

我想 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) {
    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;
}

关于c - 为 3 个函数派生 3 个子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472542/

相关文章:

c - 叉(); C 中的方法 : determine order

c - 如何使用来自 child 的命名信号量

c - 使用管道写入和读取 Int 数组

c - 套接字应用程序无法接收 tcpreplay 发送的数据包

c - 使用 c 查找给定数字的二进制的反转

c - 如何修复给出错误求和值的 C 函数

c - 通过 execl 向 grep 提供参数,不起作用;字符串可能的格式问题

c - fork() 后管道的行为

c - C 中的 Fork() 和 && 短路

c - Kernighan和Ritchie malloc自由逻辑