Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does wait(NULL) exactly work?

Tags:

c

fork

wait

If i use wait(null) , and i know (for sure) that the child will finish (exit) before we reach to wait(null) in the parent process , does the wait(null) block the parent process ?? I mean , the wait() won't get any signal right ?

int main() {
   int pipe_descs[2] ;
   int i, n, p ;

   srand(time(NULL(  ;
   pipe(pipe_descs) ;

   for (i = 0; i < 2; i++) {
           pid_t status = fork() ;

           if (status == 0) {
                 n = rand() % 100;
                 p = (int) getpid() ;

                 write(pipe_descs[1],  &n,  sizeof(int)) ;
                 write(pipe_descs[1],  &p,  sizeof(int)) ;
                 exit(0) ;
            }
           else {
               read(pipe_descs[0],  &n,  sizeof(int)) ;
               read(pipe_descs[0],  &p,  sizeof(int)) ;
               printf(" %d %d\n", n, p) ;
               wait(NULL)  ;   //  (1)
         }
   }

    return 0 ;
}
like image 842
Alaa Damouny Avatar asked Feb 23 '17 21:02

Alaa Damouny


1 Answers

wait(NULL) will block parent process until any of its children has finished. If child terminates before parent process reaches wait(NULL) then the child process turns to a zombie process until its parent waits on it and its released from memory.

If parent process doesn't wait for its child, and parent finishes first, then the child process becomes orphan and is assigned to init as its child. And init will wait and release the process entry in the process table.

In other words: parent process will be blocked until child process returns an exit status to the operating system which is then returned to parent process. If child finishes before parent reaches wait(NULL) then it will read the exit status, release the process entry in the process table and continue execution until it finishes as well.

like image 197
Tony Tannous Avatar answered Oct 11 '22 18:10

Tony Tannous