一尘不染

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

linux

我正在运行程序

#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?


阅读 505

收藏
2020-06-07

共1个答案

一尘不染

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

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

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

2020-06-07