'fork() and wait() in C

I am trying to learn the fork() and wait() system calls. If I run this code :

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


int main (){

printf("Hi, I am the parent with pid %d \n ",getpid());

int rc = fork();

printf("Fork returned :   %d \n ",rc);

printf("I am the process with pid %d \n ",getpid());

wait(NULL);
return 0;
}

I get the output as expected on the terminal :

Hi, I am the parent with pid 3639 
 Fork returned :   3640 
 I am the process with pid 3639 
 Fork returned :   0 
 I am the process with pid 3640 

However , If I remove wait(NULL) , I get a strange output on the terminal :

    Hi, I am the parent with pid 3715 
     Fork returned :   3716 
     I am the process with pid 3715 
     John@John-VirtualBox:~/Fork5$  Fork returned :   0 
     I am the process with pid 3716 

I totally understand that , we use wait() to make the parent process waits for the child to end executiion so that we can remove it from the process table and deallocate its PID . But here , if I remove the wait , we see that the terminal is called again :

         John@John-VirtualBox:~/Fork5$  Fork returned :   0 
         I am the process with pid 3716  

And even it doesn't return again back . I don't understand what this have to do with the functionality of wait ? Or in other words , why wait will fix this issue ?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source