用fork创建多个进程

时间:2019-04-05 12:14:33

标签: c operating-system fork

我需要用fork创建3个子进程。每个进程都应该永远运行并在循环中执行某些操作。

我写了一些代码,但是我认为这不是编码的好方法。它有效,但是我真的认为这不是编程的正确方法。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
    pid_t pid1, pid2, pid3;

    pid1 = fork();

    // Fork Error
    if (pid1 == -1) {
        printf("Fork error\n");

        return EXIT_FAILURE;
    }

    else if (pid1 == 0) {
        printf("Child 1!\n");

        while (1) ;
    }

    else {
        pid2 = fork();
    }

    // Fork Error
    if (pid2 == -1) {
        printf("Fork error\n");

        return EXIT_FAILURE;
    }

    else if (pid2 == 0) {
        printf("Child 2!\n");

        while (1) ;
    }

    else {
        pid3 = fork();
    }

    // Fork Error
    if (pid3 == -1) {
        printf("Fork error\n");

        return EXIT_FAILURE;
    }

    else if (pid3 == 0) {
        printf("Child 3!\n");

        while (1) ;
    }

    return EXIT_SUCCESS;
}

请,有人可以帮我更好的方法吗?

更新:我尝试了此代码,但无法正常工作

int main() {
        pid_t pid[3];

        for (int i = 0; i < 3; i++) {
        pid[i] == fork();

        if (pid[i] == -1) {
            printf("Fork error!\n");

            return EXIT_FAILURE;
        }

        else if (pid[i] == 0) {
            printf("Child %d\n", i);

            while (1) ;
        }
    }

    wait(0);

    return EXIT_SUCCESS;
}

该程序的输出为空

1 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
        int status = 0;

        pid_t pid[3];

        for (int i = 0; i < 3; i++) {
        pid[i] = fork();

        if (pid[i] == -1) {
            perror("fork!");

            return EXIT_FAILURE;
        }

        else if (pid[i] == 0) {
            printf("Child %d\n", i);

            while (1) ;
        }
    }

    while(wait(&status) > 0);

    return EXIT_SUCCESS;
}