C - 使用fork()创建3个子进程

时间:2016-05-10 10:06:31

标签: c process fork waitpid

我想用fork()创建3个子进程。这是我创建一个子进程的代码:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

void main(){
    int pid = fork();
    if(pid < 0){
        /* was not successfully */
    }
    else if (pid > 0){
        /* Parent process */
    }
    else{
        /* Child process */
        for (int i = 0; i < 20; i++){
            printf("1");
            usleep(1000);
        }
        exit(0);
    }
}

子进程应该打印数字1的20倍,每次后睡1毫秒。

我知道我不能使用fork()3次,因为那时我会得到7个子进程。但我怎么能得到3?我怎么能这样做,每个子进程都打印另一个数字?例如,第一个处理编号1,第二个处理编号2和第三个处理编号3.

父母应该使用waitpid()等待所有3个孩子。如果完成,父母应该打印一条消息。但是我怎么能在这里使用waitpid呢?

2 个答案:

答案 0 :(得分:4)

for (int kid = 0; kid < 3; ++kid) {
    int pid = fork();
    if(pid < 0){
        exit(EXIT_FAILURE);
    }
    else if (pid > 0){
        /* Parent process */
    }
    else{
        /* Child process */
        exit(EXIT_SUCCESS);
    }
}

for (int kid = 0; kid < 3; ++kid) {
    int status;
    pid_t pid = wait(&status); // kids could be ready in any order
}

答案 1 :(得分:1)

你可以使用fork 3次,但你必须确保只从父进程调用fork。

最简单的方法是确保孩子不会逃脱{}阻止。

Attributes[0].Name

waitpid(2)很简单。