gpt4 book ai didi

c++ - fork创建子进程时,parent ID与parent ID不一样

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:48 25 4
gpt4 key购买 nike

<分区>

为了解释我要问的问题,让我们考虑这段代码,

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
pid_t child, parent;
parent = getpid();
printf("Main parent pid: %d\n",parent );

if((child = fork()) < 0) {
printf("Error\n");
} else if(child == 0 ) {
printf("A Child process is created, pid: %d, ppid: %d \n",
getpid(), getppid());
} else if(child > 0) {
printf("Parent says: Child pid: %d, getpid: %d, getppid: %d\n",
child, getpid(), getppid());
}
return 0;
}

当我在终端上执行这段代码时,我得到这样的输出

Main pid: 711 

Parent says: Child pid: 712, getpid: 711, getppid: 598

A Child process is created, pid: 712, ppid: 1

据我所知,当我通过从一个已经创建的进程中 fork 来创建一个新进程时,这个新进程的父进程必须是我 fork 的进程。Hovewer,正如您从输出中看到的那样,子进程的父进程 ID 为 1,即 init 进程,为什么会这样?是我的理解有误,还是我没有看到其他一些东西?

注意:我在 Mac OSX 上工作。

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