user3087496
user3087496

Reputation: 9

Function to create n child processes

int proc_create(int n)
{
   int pid;
   n = n+1;
   printf("The parent process id: %d\n", getpid());
   while(1)
   {
      if(pid=fork() < 0){
         perror("Fork Failed!");
         exit(1);
      }else{
         printf("The child process ID is: %d\n", pid);
      }
   }
}

I have written the above function that will create n child processes and each child processes will print out it's own child id. Can someone tell me the flaws and how i can improve the above function.

Upvotes: 0

Views: 4937

Answers (1)

Marco
Marco

Reputation: 2897

n is a local variable, so you just do n + 1 which doesn't change anything.

It creates infinite child processes, because the fork is inside a while(1) loop

int *proc_create(int n) {
    int *childs = malloc(sizeof *childs * n);

    printf("The parent process id: %d\n", getpid());
    for (int i = 0; i < n; i++) {
        int pid = fork();
        if (pid < 0) {
            perror("Fork Failed!");
            exit(1);
        } else if (pid == 0) {
            return NULL;
        } else {
            childs[i] = pid;
            printf("The child process ID is: %d\n", pid);
        }
    }

    return childs;
}

This process spawn N children, when they return from proc_create() they will return NULL. The parent will return an array with the pids of its N children.

Upvotes: 2

Related Questions