prova con

if (wait(&status)>0)
exit(0);
else
exit(1);

Il problema è per forza nel controllo che fa quell'if

Siamo d'accordo che non ritorna -1, ma per il controllo che fai tu confronti il pid del processo terminato con il pid dell'ultimo processo che hai creato, il che molto probabilmente restituirà falso, eseguendo la exit(1);

Può essere soltanto un problema di pid confrontati...