gpt4 book ai didi

c - 为什么 child 的 getppid() 返回 1

转载 作者:IT王子 更新时间:2023-10-29 00:05:39 24 4
gpt4 key购买 nike

我正在运行程序

#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

我听不懂这句话

The PID of parent of child is 1

应该是3071吧?

最佳答案

因为在子进程请求其父进程的 pid 时父进程已完成。

当一个进程结束时,它的所有子进程都被重新分配为 init 进程的子进程,该进程的 pid 为 1。

尝试使用 wait()在 parent 的代码中等待 child 执行。然后它应该会按预期工作。

关于c - 为什么 child 的 getppid() 返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16078188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com