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

C - Create 3 child processes with fork()

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

#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);
    }
}

child 进程应该打印 20 次数字 1 并在每次之后休眠 1 毫秒。

我知道我不能只使用 fork() 3 次,因为那样我会得到 7 child 个进程。但是我怎样才能得到 3 呢?我该怎么做,每个 child 进程打印另一个数字?例如第一个进程号1,第二个进程号2,第三个进程号3.

而 parent 应该使用 waitpid() 等待所有 3 children。如果他们完成了 parent 应该打印一条消息。但是这里怎么用waitpid呢?

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

最简单的方法是确保子项永远不会逃脱其 {} 块。

if((pid = fork())<0) /*handle error*/;
if(pid == 0){
   //do child stuff

   exit(0); //the child must not escape this {} block
}
//do parent stuff

waitpid(2)很简单。

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
}