GETPID和getppid返回两个不同的值(getpid and getppid return t

2019-07-20 21:12发布

当我运行下面的代码

#include <stdio.h>
#include <sys/types.h>
//int i=0;
int main(){

int id ;
id = fork() ;
printf("id value : %d\n",id);
    if ( id == 0 )
    {
    printf ( "Child : Hello I am the child process\n");
    printf ( "Child : Child’s PID: %d\n", getpid());
    printf ( "Child : Parent’s PID: %d\n", getppid());
    }
    else
    {
    printf ( "Parent : Hello I am the parent process\n" ) ;
    printf ( "Parent : Parent’s PID: %d\n", getpid());
    printf ( "Parent : Child’s PID: %d\n", id);
    } 

}

我的输出

id value : 20173
Parent : Hello I am the parent process
Parent : Parent’s PID: 20172
Parent : Child’s PID: 20173
id value : 0
Child : Hello I am the child process
Child : Child’s PID: 20173
Child : Parent’s PID: 1

如何能在父母的PID(20172)从孩子的父母的ID(1)有什么区别? 如果不是这两个相等?

Answer 1:

发生了什么事是孩子运行之前父终止。 这留下了孩子作为一个孤儿,它被用的1 PID根进程采纳如果你把一个延迟或从标准,而不是让家长终止你会看到你所期望的结果读取数据。

过程ID 1通常是init进程用于启动和关闭系统的主要原因。 在init(简称初始化)是一个守护进程,这是所有其他进程的直接或间接的祖先。 维基链接初始化

作为user314104指出wait()和waitpid函数()函数被设计成允许父进程可以将自身挂起,直到一个子进程的状态发生变化。 因此,一个调用wait()在你的父分支if语句会导致家长等待孩子结束。



Answer 2:

因为父进程中运行并发布,其子进程成了一个孤儿,在init(短初始化),其PID为1所接收的孤儿进程。



文章来源: getpid and getppid return two different values
标签: c fork pid