Quando esegui la exec per lanciare il processo che lancia il terminale, il pid del processo non cambia.Per cui quando la shell si chiude il programma lanciato con la exec termina e puoi benissimo usare la funzione waitpid per aspettare che tale processo termini.Se termina ne puoi creare uno nuovo.