了解linux中的fork()

时间:2016-02-08 03:07:25

标签: c linux fork

我有以下代码

void main()
{

pid_t pid,pid1;

pid = fork();

if(pid==0)
{
  pid1= getpid();

  printf("\n Child A %d" ,pid);
  printf("\n Child B %d",pid1);
}
else
{

  pid1 = getpid();
  printf("\n Parent C %d:",pid); 
  printf("\nParent d %d:",pid1);

 }
}

我不明白为什么我为B和C获得相同的进程ID。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

pid1 = getpid();

这是在子进程中运行的,因此给出了进程id。

pid = fork();

这是从父进程启动的,但父级和子级都可以使用返回值。但是,它会向父进程和子进程返回不同的值。直接从fork man page

  

子进程的PID在父进程中返回,0是   孩子回来了

因此在两种情况下(B和C),它都是子进程的pid。

答案 1 :(得分:0)

此代码由两个进程运行,一个是父进程,另一个是子进程。 p process - 返回c进程的id和c进程返回0.我认为你的程序可能是fork()的一个demo,所以它可能是这样的:

void main()
{

pid_t pid,pid1;

pid = fork();

if(pid==0)
{
pid1= getpid();

printf("\n i am Child A %d" ,pid1);
printf("\n Parent A %d",getppid());
}
else
{

pid1 = getpid();
printf("\n i am Parent B %d:",pid1);
printf("\n Children B %d:",pid); 


 }
}