getppid()没有返回父亲的pid

时间:2014-06-24 11:16:11

标签: c++ linux pid fork

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

我在Oracle VM VirtualBox(32位O.S.)上使用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$ 

我很清楚,如果父母在孩子面前死亡,孩子会自动被原来的&#34; init&#34;过程,PID 1.但这里肯定不是这种情况。

1 个答案:

答案 0 :(得分:0)

当父进程在执行getppid()之前终止时,会发生这种情况。在父母的末尾使用wait(NULL)来解决问题。