getpid and getppid return two different values

56,373

What's happening is that the parent is terminating before the child runs. this leaves the child as an orphan and it gets adopted by the root process with PID of 1. If you put a delay or read data from stdin rather than letting the parent terminate you'll see the result you expect.

Process ID 1 is usually the init process primarily responsible for starting and shutting down the system. The init (short for initialization) is a daemon process that is the direct or indirect ancestor of all other processes. wiki link for init

As user314104 points out the wait() and waitpid() functions are designed to allow a parent process to suspend itself until the state of a child process changes. So a call to wait() in the parent branch of your if statement would cause the parent to wait for the child to terminate.

Share:
56,373
Assasins
Author by

Assasins

I am a computer engineering undergraduate from SriLanka

Updated on June 01, 2020

Comments

  • Assasins
    Assasins almost 4 years

    When I run the code below

    #include <stdio.h>
    #include <sys/types.h>
    //int i=0;
    int main(){
    
    int id ;
    id = fork() ;
    printf("id value : %d\n",id);
        if ( id == 0 )
        {
        printf ( "Child : Hello I am the child process\n");
        printf ( "Child : Child’s PID: %d\n", getpid());
        printf ( "Child : Parent’s PID: %d\n", getppid());
        }
        else
        {
        printf ( "Parent : Hello I am the parent process\n" ) ;
        printf ( "Parent : Parent’s PID: %d\n", getpid());
        printf ( "Parent : Child’s PID: %d\n", id);
        } 
    
    }
    

    My output is

    id value : 20173
    Parent : Hello I am the parent process
    Parent : Parent’s PID: 20172
    Parent : Child’s PID: 20173
    id value : 0
    Child : Hello I am the child process
    Child : Child’s PID: 20173
    Child : Parent’s PID: 1
    

    How can the parent's PID(20172) differ from the child's parent's ID (1)? Shouldn't those two be equal?

  • user314104
    user314104 about 11 years
    Or, more conventionally, wait() and waitpid().
  • Grijesh Chauhan
    Grijesh Chauhan about 11 years
    @Jackson added more information with link. I feel it need to complete your good answer. if you didn't like revert back.