为什么子级的getppid()返回1

我正在运行程序

#include<stdio.h>

#include <unistd.h>

main()

{

pid_t pid, ppid;

printf("Hello World1\n");

pid=fork();

if(pid==0)

{

printf("I am the child\n");

printf("The PID of child is %d\n",getpid());

printf("The PID of parent of child is %d\n",getppid());

}

else

{

printf("I am the parent\n");

printf("The PID of parent is %d\n",getpid());

printf("The PID of parent of parent is %d\n",getppid());

}

}

我得到的输出是。

$ ./a.out 

Hello World1

I am the parent

The PID of parent is 3071

The PID of parent of parent is 2456

I am the child

The PID of child is 3072

The PID of parent of child is 1

我不明白这条线

子女的父母的PID为1

应该是3071?

回答:

因为在孩子要求其父母的pid之前,父进程已完成。

进程完成后,其所有子级都将重新分配为init进程的子级,其pid为1。

尝试使用wait()父母的代码来等待孩子执行。然后,它应该会按预期工作。

以上是 为什么子级的getppid()返回1 的全部内容, 来源链接: utcz.com/qa/416128.html

回到顶部