【发布时间】:2021-07-16 14:57:44
【问题描述】:
我必须建立流程树:
我使用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
}
}
}
}
}
}
Windows 上的结果:
A: Parent of all: 908
B: My pid: 910, parent id: 908
C: My pid: 911, parent id: 908
D: My pid: 912, parent id: 910
F: My pid: 913, parent id: 911
G: My pid: 914, parent id: 912
E: My pid: 915, parent id: 910
J: My pid: 916, parent id: 913
H: My pid: 917, parent id: 912
I: My pid: 919, parent id: 1
sh: pstree: command not found
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
我不知道应该添加或更改什么才能使其正常工作。
【问题讨论】:
-
我无法重现,在 Linux 上我得到了 e。 G。
A: Parent of all: 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: 1 I: My pid: 31990, parent id: 31987 G: My pid: 31991, parent id: 31986 H: My pid: 31993, parent id: 1.
标签: linux process fork parent pid