这个问题已经在这里有一个答案:
- 为什么我的过程得到叉作为systemd他们的父母? 3个回答
我一直在试图了解叉和流程。 我只是遇到了一个小问题,这段代码,并试图了解这是为什么? 我试图通过系统调用来复制过程Fork
与价值pid
是积极的,它击中了父母和其getpid()
返回。 并同时将其打孩子及其getpid()
返回。 但问题是,当我打电话了getppid()
在这里,有人预计,以显示其父进程标识符,它正好是3370。 但是在编译时和该文件的执行,它显示的值getppid()
为1517(没有父母的ID)。
我使用Ubuntu上的Oracle VM VirtualBox(32位操作系统)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$
我知道,平凡的,如果父母其子前去世,孩子自动由最初的“初始化”过程中采用,以PID
1。但这里绝对不是这种情况。