title: using fork() to make 3 children out of 1 parent in C (not C++)
body: <p>Hi there I've been working on a program that forks children and later will fork more children from each child but that's not what I need help with. When I run my program (in here it is a function but works the same) I am supposed to have one parent(PPID) spawn 3 children (PIDS= 1,2,3) but what I get is either the same PID and PPID 3 times (my current code) or before I was getting 3 parents with each parent having one child and the PPIDS were different as well as the PIDS, but the PPIDs were just the same as the previous child PIDs. In my latest attempts it never displays the parent(dad) message above the child(son). It should look like this</p>
  
  <pre><code>[dad] hi am I PID 1234 and I come from ####(dont care what this number is)
  [son] hi i am PID 1111 and I come from PPID 1234
  [son] hi i am PID 1112 and I come from PPID 1234
  [son] hi i am PID 1113 and I come from PPID 1234
  </code></pre>
  
  <p>here is my code. I'm just looking for hints if possible unless it's just a silly mistake I've made like "oh just move the fork() to the child process" or something like that.</p>
  
  <p>Also I have a child_count just so I can easily count the children.</p>
  
  <pre><code> int forking(null)
  {
         void about(char *);
          int i=0;
          int j=0;
          int child_count =0;
          about("dad");
  
      for(i = 0; i &lt; 3; i++ ){
          pid_t child = 0;
          child = fork();
  
  
              if (child &lt; 0) { //unable to fork error
                      perror ("Unable to fork");
                      exit(-1);}
  
             else if (child == 0){ //child process
                      about ("son");
                      printf("I am child #%d \n",child_count);
                      child_count++;
                      exit(0);}
  
              else { //parent process (do nothing)
  
                  }
              }
  
                  for(j = 0; j &lt; 3; j++ ){
                              wait(NULL);//wait for parent to acknowledge child process
                              }
  return 0;
  }
  </code></pre>