Drzewo procesów

Potrzebuję pomocy w zadaniu z programowania, z którym wybitnie się nie lubię.
Nie chcę oczywiście, żeby ktoś napisał za mnie cały kod, ale chętne przyjmę jakieś rady i wskazówki.

Kod ma utworzyć drzewo procesów jak poniżej:
drewo
Proces który jest korzeniem drzewa jest macierzysty, pozostałe P powstają w wyniku fork(), a X to pstree.
Dodatkowo wypisać PID ( getpid() ), PPID ( getppid() ) i zawiesić się na parę sekund (ja realizuję to funkcją sleep).

Ostatecznie na ekranie ma wyświetlić się drzewo (za pomocą funkcji exec* i pstree -c) i lista z PID i PPID.

Do tej pory wyrzeźbiłam coś takiego:

kod

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

// === FUNKCJA WYSWIETLAJACA NUMER PROCESU ===
void numer (int n){
printf(“Proces: %d\t PID: %d\t PPID: %d”, n, getpid(), getppid());
sleep(5);
}

// === MAIN ===
int main(void){
int p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22;
char bufor[20];
sprintf(bufor, “pstree -c %d”, getpid());

if(!(p12=fork())){
if(!(p13=fork())){
if(!(p14=fork())){ numer(14); printf("\n");}
else{
if(!(p15=fork())){ numer(15); printf("\n");}
else{ numer(16); printf("\n");}
}
}
else { numer(13); printf("\n"); }
}
else{
if(!(p17=fork())){ numer(17); printf("\n");}
else{
if(!(p18=fork())){ numer(18); printf("\n");}
else{ numer(19); printf("\n");}
}
}
else{
if(!(p20=fork())) { numer(20); printf("\n");}
else{
if(!(p21=fork())) { numer(21); printf("\n");}
else {numer(22); printf("\n");}
}
}
else { numer(12); printf("\n");} // !!!
sleep(15);
return 0;
}

Co powinnam zrobić dalej?

Tu masz ten programik pstree a ten co masz zrobić to jest prawie to samo czyli wystarczy go przepisać i troche pozmieniać ale sama zasada działania jest ta sama