Infatti si. weit torna -1 se il processo che attende è finito.

Se non vuoi che il padre sia bloccato, devi procedere con la gestione dei segnali.

In altre parole devi catturare il segnale di terminazione del figlio ovvero SIGCHLD e gestire come meglio credi la situazione.

Ad esempio per quanto riguarda il codice del padre, inserisci questa riga dopo le fork:


signal(SIGCHLD, SIG_IGN);

Che serve per indicare che il segnale di terminazione deve essere ignorato.

Qualora non lo volessi ignorare, scrivi una subrutine che la gestisca e sostituisci la sua intestazione a SIG_IGN.