8 processos contendo 3 pais e 2 deles criam 3 filhos em C


Estou com uma dificuldade em resolver um exercício. Tenho que fazer um programa que gere 3 processos pai que por sua vez, dois deles dêem origem à criação de 3 processos filho. E no total, tenho que gerar 8 processos.

O meu problema é que estou a gerar 9 processos e não estou a conseguir perceber porquê. Podem ajudar-me a tentar ver a luz? 🙂

Obrigado!


    #include <stdio.h> 
    #include <sys/types.h> 
    #include <unistd.h> 
    
    int main(){
        int x = 2;
        pid_t p = fork(); 
        
        if (p == 0) {
            pid_t w = fork();
            x--;
        }  pid_t t = fork();
             if (t == 0){
                
            x+=3;
        }   else {
            pid_t s = fork(); 
    
        }      
        
        printf("x = %d -> PID = %d -> pai: %d n", x, getpid(), getppid()); 
    
        sleep(1);
        return 0;
    }