gpt4 book ai didi

c++ - getppid() 不返回 parent 的 pid

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

<分区>

我一直在努力学习 fork 和进程。我刚刚在这段代码中遇到了一个小问题,并试图理解为什么?我试图通过系统调用 Fork 复制一个进程,并且 pid 的值为正,它命中了父进程及其 getpid() 被退回。同时它击中了 child 并且它的 getpid() 被返回。但问题是,当我在这里调用 getppid() 时,它应该显示其父进程标识符,恰好是 3370。但是在编译和执行该文件时,它显示 getppid() 的值为 1517(不是父 ID)。

我在 Oracle VM VirtualBox(32 位操作系统)上使用 ubuntu 14.04 LTS。这个forking.cpp文件的代码如下:

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <cstdlib>

using namespace std;

int main()
{
pid_t pid1;
pid1 = fork();
if(pid1 == -1)
{
cout << "No child process formed: " << getpid() <<endl;
}
else if(pid1 == 0)
{
cout << "Child has been formed: " << getpid()<< " and its parent's id: " << getppid() << endl;
}
else if(pid1 > 0)
{
cout << "Parent process has been called: " << getpid() << endl;

}

cout << "END of Stuffs" << endl;
return 0;
exit(0);
}

对于编译,我在终端上使用命令 g++ forking.cpp 并执行 ./a.out。然后它显示了这个:

Parent process has been called: 3370
END of Stuffs
Child has been formed: 3371 and its parent's id: 1517
END of Stuffs

shashish-vm@shashishvm-VirtualBox:~/Desktop$

我很清楚,如果 parent 先于 child 去世, child 会自动被原来的“init”进程收养,PID 1。但这里绝对不是这种情况。

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