*) j'essaie de programmer un interpréteur de commande et mon problème est que lorsque j'essaie d'enter deux commandes avec un pipe il exécute correctement mais ca sort du minishell.

et ce dans le cas ou j'ai mis le wait aprés l'exécution du père.

mais si j mais le wait juste au début du père ca bloque dans le wait.

c'est ca mon bout de code:
/************************************************** *****************/
while (1) {
struct cmdline *l;
int i, j;

printf("shell> ");
l = readcmd();

/* If input stream closed, normal termination */
if (!l) {
printf("exit\n");
exit(0);
}

if (l->err) {
/* Syntax error, read another command */
printf("error: %s\n", l->err);
continue;
}

if (l->in) printf("in: %s\n", l->in);
if (l->out) printf("out: %s\n", l->out);
char **cmd1;
char **cmd2;
for (i=0; l->seq[i+1]!=NULL ; i=i+1) {
cmd1=l->seq[i];
cmd2= l->seq[i+1];
int k=0;

pid_t retour ;
int j=0;
pid_t wait_pid;
int wait_status;
int tube[2], status;
if (pipe (tube) == -1) { perror ("creation pipe impossible\n") ; exit (1) ; }
pid_t child_pid = fork();
if ((int)child_pid == -1)
{

exit(EXIT_FAILURE);
}
else if (child_pid == 0)
{

printf ("processus fils\n") ;
close (STDOUT_FILENO);
dup(tube[1]);
close(tube[0]);
execvp(cmd1[0], cmd1);




}
else
{
printf("The child process has stopped.\n");

close( STDIN_FILENO);
dup(tube[0]);
close(tube[1]);
execvp(cmd2[0],cmd2);
wait_pid=wait(&status);// c ici le problème


}
_exit(0);
}


}
/************************************************** ****************/


j'ai vraiment séché pour résoudre ce problème et je voudrais bien que quelqu'un me donne un coup de main.