This question already has answers here:
Why do processes I fork get systemd as their parent?
(3个答案)
4年前关闭。
我一直在尝试了解fork和流程。我只是在这段代码中遇到了一个小问题,并试图理解为什么?
我试图通过系统调用
但是在编译和执行此文件后,它显示
我在Oracle VM VirtualBox(32位操作系统)上使用ubuntu 14.04 LTS。此
为了进行编译,我在终端上使用了
然后显示如下:
我知道,如果 parent 在 child 之前去世,那么这个 child 会被原始的“init”进程自动采用
(3个答案)
4年前关闭。
我一直在尝试了解fork和流程。我只是在这段代码中遇到了一个小问题,并试图理解为什么?
我试图通过系统调用
Fork
复制一个进程,并且pid
的值为正,它命中了父级,并返回了getpid()
。同时,它击中了 child ,并返回了其getpid()
。但是问题是,当我在此处调用getppid()
时,希望它显示其父级的进程标识符,该标识符恰巧是 3370 。但是在编译和执行此文件后,它显示
getppid()
的值为 1517 (不是 parent 的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收养,但是这里绝对不是这种情况。 最佳答案
当父进程在执行getppid()
之前终止时,会发生这种情况。在父级末尾使用wait(NULL)
解决问题。
关于c++ - getppid()不返回 parent 的pid ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24385235/
10-14 03:19