Bonjour;

Mon programme doit créer des processus fils afin de lancer les commandes passées au main du programme dans argv, voici mon code:

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#define NBMOTSMAX 20
 
int main(int argc, char *argv[]){
	pid_t pid;
	int nbMots = argc-1, status, i;
	char *commandes[NBMOTSMAX];
 
	for(i=0; i < nbMots; i++)
	{
		commandes[i] = argv[i+1];
 
	}
 
	commandes[nbMots]=(char *) NULL;
 
	for(i=0; i < nbMots; i++){
		switch(pid=fork()){
			case -1: perror("Processus Fils");
				break;
			case 0: printf("[%d] Je lance %s :\n", getpid(), commandes[i]);
				execvp(commandes[i], commandes);
				exit(1);
				break;
			default:
				printf("[%d] J'ai délégué %s à %d. J'attends sa fin...\n", getpid(), commandes[i], pid);
				wait(&status);
				printf("[%d] %d terminé.\n", getpid(), pid);
		}
	}
 
	printf("[%d] J'ai fini.\n", getpid());
 
	return 0;
}

Mais j'ai un gros problème j'ai du mal a comprendre comme exécuter execvp même en lisant le man, vu l'exécution du programme je pense que mon erreur vient de la première case du tableau "commandes" qui doit contenir un lien vers le fichier executable mais après avoir tenté plusieurs choses rien ne marche, voila un exemple de l'exécution du programme avec ./exo2TP1 "sleep 5" pwd date j'obtiens la chose suivante:

Nom : 2019-02-17-181620_1024x600_scrot.png
Affichages : 662
Taille : 129,9 Ko

J'ai donc tenté de remplacer la première case du tableau commande par plusieurs fichiers exécutable contentant les commandes linux comme /bin mais peu concluant.
Voila si quelqu'un pourrait m'aider à utiliser execvp s'il vous plait car la je suis vraiment dans l'impasse

Merci d'avance.