我有以下代码

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。有人可以在这里帮助我吗?

最佳答案

pid1 = getpid();


它在子进程中运行,因此提供了子进程ID。

pid = fork();


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


  子进程的PID在父级中返回,0为
  归还孩子


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

关于c - 了解Linux中的fork(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35261821/

10-10 06:22