fork() child and parent processes

后端 未结 5 499
遥遥无期
遥遥无期 2021-02-01 10:37

I am trying to create a program that uses fork() to create a new process. The sample output should look like so:

This is the child process. My pid is 733 and my parent\'

相关标签:
5条回答
  • 2021-02-01 10:53

    It is printing twice because you are calling printf twice, once in the execution of your program and once in the fork. Try taking your fork() out of the printf call.

    0 讨论(0)
  • 2021-02-01 11:01

    We control fork() process call by if, else statement. See my code below:

    int main()
    {
       int forkresult, parent_ID;
    
       forkresult=fork();
       if(forkresult !=0 )
       {
            printf(" I am the parent my ID is = %d" , getpid());
            printf(" and my child ID is = %d\n" , forkresult);
       }
       parent_ID = getpid();
    
       if(forkresult ==0)
          printf(" I am the  child ID is = %d",getpid());
       else
          printf(" and my parent ID is = %d", parent_ID);
    }
    
    0 讨论(0)
  • 2021-02-01 11:02

    Start by reading the fork man page as well as the getppid / getpid man pages.

    From fork's

    On success, the PID of the child process is returned in the parent's thread of execution, and a 0 is returned in the child's thread of execution. On failure, a -1 will be returned in the parent's context, no child process will be created, and errno will be set appropriately.

    So this should be something down the lines of

    if ((pid=fork())==0){
        printf("yada yada %u and yada yada %u",getpid(),getppid());
    }
    else{ /* avoids error checking*/
        printf("Dont yada yada me, im your parent with pid %u ", getpid());
    }
    

    As to your question:

    This is the child process. My pid is 22163 and my parent's id is 0.

    This is the child process. My pid is 22162 and my parent's id is 22163.

    fork() executes before the printf. So when its done, you have two processes with the same instructions to execute. Therefore, printf will execute twice. The call to fork() will return 0 to the child process, and the pid of the child process to the parent process.

    You get two running processes, each one will execute this instruction statement:

    printf ("... My pid is %d and my parent's id is %d",getpid(),0); 
    

    and

    printf ("... My pid is %d and my parent's id is %d",getpid(),22163);  
    

    ~

    To wrap it up, the above line is the child, specifying its pid. The second line is the parent process, specifying its id (22162) and its child's (22163).

    0 讨论(0)
  • 2021-02-01 11:06

    It is printing the statement twice because it is printing it for both the parent and the child. The parent has a parent id of 0

    Try something like this:

     pid_t  pid;
     pid = fork();
     if (pid == 0) 
        printf("This is the child process. My pid is %d and my parent's id is %d.\n", getpid(),getppid());
     else 
        printf("This is the parent process. My pid is %d and my parent's id is %d.\n", getpid(), getppid() );
    
    0 讨论(0)
  • 2021-02-01 11:18

    This is the correct way for getting the correct output.... However, childs parent id maybe sometimes printed as 1 because parent process gets terminated and the root process with pid = 1 controls this orphan process.

     pid_t  pid;
     pid = fork();
     if (pid == 0) 
        printf("This is the child process. My pid is %d and my parent's id 
          is %d.\n", getpid(), getppid());
     else 
         printf("This is the parent process. My pid is %d and my parent's 
             id is %d.\n", getpid(), pid);
    
    0 讨论(0)
提交回复
热议问题