How to get child PID in C?

98,168

Solution 1

fork already returns the child's pid. Just store the return value.

look at man 2 fork:

RETURN VALUES

 Upon successful completion, fork() returns a value of 0 to the child process and
 returns the process ID of the child process to the parent process.  Otherwise, a
 value of -1 is returned to the parent process, no child process is created, and
 the global variable errno is set to indicate the error.

Solution 2

As mentioned in previous answer that "fork() returns a value of 0 to the child process and returns the process ID of the child process to the parent process." So, the code can be written in this way:

pid = fork(); /* call fork() from parent process*/
if (0 == pid)
{
  /* fork returned 0. This part will be executed by child process*/
  /*  getpid() will give child process id here */
}
else
{
  /* fork returned child pid which is non zero. This part will be executed by parent process*/
  /*  getpid() will give parent process id here */
} 

This link is very helpful and explains in detail.

Solution 3

if fork() is successfully created then it returns 0 value in the child process.

int main(void)
{
    int id;
    id= fork();
    if(id==0)
    {
        printf("I am child process my ID is   =  %d\n" , getpid());
    }
}

Solution 4

If you are calling fork in the following way:

pid = fork()

Then pid is in fact your child PID. So you can print it out from the parent.

Share:
98,168
Derek
Author by

Derek

Updated on July 05, 2022

Comments

  • Derek
    Derek almost 2 years

    I'm creating child processes in a for-loop. Inside the child process, I can retrieve the child PID with getpid().

    However, for some reason when I try to store the value of getpid() into a variable declared by the parent process, the change is nullified when I check for it in the parent process. I'm assuming this has to do with some sort of process variable scope. Not really familiar with C, so can't be too sure.

    Anyhow what is a way of storing the result of getpid() of a child PID (when called from the child process) into a variable in the parent process?

    Or maybe another approach is storing fork() into a variable in the parent and calling some function on that variable to retrieve the child's PID? I don't know how to do this either, so if this is the better way, how would you do this?

  • Celeritas
    Celeritas over 9 years
    -1 getpid() returns the pid of the calling process, not it's child(ren)