Предполагаемое дерево процессов выглядит следующим образом:
0
|->1
| |->2
| | |->3
| |
| |->2
|
|->1
| |->2
|
|->1
Таким образом, чтобы иметь возможность печатать уровень каждого процесса, мы должны просто инициализировать переменную level
в 0
снаружи основной цикл for
и просто увеличивайте его значение при каждом создании дочернего процесса.
Следующий код будет печатать уровень каждого дочернего процесса, как и ожидалось:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t baseID = getpid();
printf("Base Process ID: %d, level: 0 \n", baseID);
int level = 0;
for (int i = 0; i < 3; i++) {
pid_t pid = fork();
if (pid == 0) { // Child
pid_t childID = getpid();
pid_t parentID = getppid();
level++;
printf("Process ID: %d, Parent ID: %d, level: %d \n", getpid(), getppid(), level);
} else { // Parent
wait(NULL);
}
}
return 0;
}