getppid()没有返回父母的PID [复制](getppid() not returning p

2019-10-20 08:23发布

这个问题已经在这里有一个答案:

  • 为什么我的过程得到叉作为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。但这里绝对不是这种情况。

Answer 1:

当父处理的执行之前终止会发生这种情况getppid() 使用wait(NULL)在结束父来解决这个问题。



文章来源: getppid() not returning parent's pid [duplicate]
标签: c++ linux pid fork