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) ;