Linux getppid返回错误的父项';s pid

Linux getppid返回错误的父项';s pid,linux,process,fork,parent,pid,Linux,Process,Fork,Parent,Pid,我必须构建流程树: 我使用了fork命令来执行此操作,但每个进程都显示相同(错误)的ppid:1528,这不是其父进程的pid。在windows上,我使用了cLions编译器,它工作得很好(除了我),但是树没有出现。在linux上,我使用gcc-o,结果无效,并且没有进程树 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { char buf[40

我必须构建流程树:

我使用了
fork
命令来执行此操作,但每个进程都显示相同(错误)的ppid:1528,这不是其父进程的pid。在windows上,我使用了cLions编译器,它工作得很好(除了我),但是树没有出现。在linux上,我使用gcc-o,结果无效,并且没有进程树

这是我的密码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {

char buf[40];
sprintf(buf, "pstree -c %d", getpid());

int a, b, c, d, e, f, g, h, i, j, k;

printf("A: Parent of all: %d\n", getpid());
a = fork();

    if (a == 0) {
    printf("B: My pid: %d, parent id: %d\n", getpid(), getppid()); // B
    b = fork();

    if (b == 0) {
        printf("D: My pid: %d, parent id: %d\n", getpid(), getppid()); // D
        d = fork();
        if (d == 0) {
            printf("G: My pid: %d, parent id: %d\n", getpid(), getppid()); // G
        }
        else {
            d = fork();
            if(d==0) {
                printf("H: My pid: %d, parent id: %d\n", getpid(), getppid()); // H
            }
        }
    }
    else{
        b = fork();
        if (b == 0) {
            printf("E: My pid: %d, parent id: %d\n", getpid(), getppid()); // E
            e=fork();
            if(e==0){
                printf("I: My pid: %d, parent id: %d\n", getpid(), getppid()); // I
            }
        }
    }
} else {
    a = fork();
    if (a == 0) {
        printf("C: My pid: %d, parent id: %d\n", getpid(), getppid()); // C
        c=fork();
        if(c==0){
            printf("F: My pid: %d, parent id: %d\n", getpid(), getppid()); // F
            f=fork();
            if(f==0){
                printf("J: My pid: %d, parent id: %d\n", getpid(), getppid()); // J
            }
            else{
                f=fork();
                if(f==0){
                    system(buf);
                    //printf("K: My pid: %d, parent id: %d\n", getpid(), getppid()); // K
                }
            }
        }
    }
}
linux上的结果:

A: Parent of all: 17793
C: My pid: 17795, parent id: 1528
B: My pid: 17794, parent id: 1528
F: My pid: 17796, parent id: 1528
J: My pid: 17798, parent id: 1528
K: My pid: 17799, parent id: 1528
D: My pid: 17797, parent id: 1528
H: My pid: 17804, parent id: 1528
G: My pid: 17803, parent id: 1528
E: My pid: 17802, parent id: 1528
I: My pid: 17805, parent id: 1528
我不知道我应该添加或更改什么以使其工作

我应该添加或更改什么以使其工作

树没有出现的原因是,当进程K开始执行
系统(buf)
命令时,请求进程树的所有的父级已经结束。要防止父对象过早消失,请插入

    while (wait(NULL) > 0) ;

作为程序中的最后一个可执行行(在
main
末尾)。

我无法复制,在Linux上我得到了e。g<代码>A:My pid:31982 B:My pid:31983,Parent id:31982 C:My pid:31984,Parent id:31982 F:My pid:31985,Parent id:31984 E:My pid:31987,Parent id:1 J:My pid:31988,Parent id:31985 D:My pid:31986,Parent id:1I:My pid:31990,Parent id:31987 G:My pid:31991,Parent id:31986 H:My pid:31993,Parent id:1。
    while (wait(NULL) > 0) ;