Exécution de commandes en parallèle

Dans une boucle d'indice i de 2 à argc-1, on fera un fork. Si cette fonction renvoie 0, cela signifie qu'on est dans le fils. On fera alors un execlp(argv[1], argv[1], argv[i], NULL) qui exécute prog avec l'argument argv[i] en ligne de commande. Attention: argv[1] apparaît deux fois dans execlp (une fois en tant que programme à exécuter et une fois en tant qu'argument 0 du programme à exécuter). De plus la liste d'arguments doit obligatoirement se terminer par NULL.

Pour attendre que tous les fils se terminent, il suffit d'appeler argc-2 fois wait.

Attention: wait peut échouer avec l'erreur EINTR, auquel cas il faut renouveler l'appel.

Quand on tape Contrôle+C, le signal SIGINT est envoyé au processus de premier plan (parexec) ainsi qu'à tous ses fils (prog). Tous ces programmes sont donc interrompus et le shell reprend la main.

Correction.


Antoine Miné