Grazie,anzitutto,per le risposte.

Sono riuscito con il waitpid ad aspettare che la shell terminasse e riavviarla,c'e' pero' un problema...me le avvia una per volta ,mentre la consegna dice che devono essere avviati tutti contemporaneamente i processi figli.

Per esempio, se scrivo cosi':
codice:
for(i=1; i <= argc; i++)
   {
        
        pid = fork();
 	if ( pid == 0)
        {
        cmd = argv[i];
        strcat(cmd,";read");
        execl("/usr/bin/xterm","/usr/bin/xterm","-e",cmd,(char *)0);
        }
        else{ 
       
        
        }

Mi avvia tutti i terminali contemporaneamente.

Se invece aggiungo il waitpid:

codice:
for(i=1; i <= argc; i++)
   {
        
        pid = fork();
 	if ( pid == 0)
        {
        cmd = argv[i];
        strcat(cmd,";read");
        execl("/usr/bin/xterm","/usr/bin/xterm","-e",cmd,(char *)0);
        }
        else{ 
        waitpid(-1,&pid,0);
        i--;
        
        }
Me li riavvia se si chiudono ma li esegue uno alla volta.Come faccio ad avviarli tutti assieme pur mantenendo la possibilita' di riavviarli in caso di chiusura?