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);
}
}
}
}