Puoi benissimo risolvere questo problema utilizzando un' altra fork() .
Per ogni terminale utilizzi 2 processi, uno che esegue la execl ed un altro che aspetta che quest' ultimo termini e appena termina ne lancia uno nuovo:

codice:
for(i=1; i <= argc; i++)
{
        pid = fork();
 	if ( pid == 0)
        {
            while(1)
            {
            // il loop indefinito può causare problemi, utilizza la signal per
            // gestire la terminazione di ogni processo.
                pid=fork();
                if(!pid)
                {
                    cmd = argv[i];
                    strcat(cmd,";read");
                    execl("/usr/bin/xterm","/usr/bin/xterm","-e",cmd,(char *)0);
                }
                else
                {
                     waitpid(-1,&pid,0);
                }
            }
        }
}