diff --git a/tp/tp4/README.md b/tp/tp4/README.md index 3ff1da8..5d2f553 100644 --- a/tp/tp4/README.md +++ b/tp/tp4/README.md @@ -7,7 +7,7 @@ rebours seconde après seconde à partir d'un nombre passé en arguments. Sur chaque ligne, rebours affiche son pid et le nombre de secondes restantes. ```bash - [denis@portabledenis SYS-TP1]$ ./rebours 5 + [denis@portabledenis src]$ ./rebours 5 2576552: debut 2576552: 5 2576552: 4 @@ -18,6 +18,39 @@ ``` On utilisera `getpid` et `sleep`. +2. Complétez [parexec.c](./src/paraexec.c) prend en arguments de ligne de commande un nom de programme prog, + suivi d’une liste arbitrairement longue d’arguments, et il exécute prog en parallèle (dans des processus) + sur chacun des arguments. Autrement dit, `./parexec prog arg1 arg2 ... argN` exécutera simulta- + nément toutes les commandes prog arg1 , prog arg2 ... prog argN chacune dans un processus + distinct. Testez avec le programme `rebours`. + ```bash + [denis@portabledenis scr]$ ./parexec ./rebours 1 2 3 + 2586243: debut + 2586243: 1 + 2586244: debut + 2586244: 2 + 2586245: debut + 2586245: 3 + 2586243: fin + 2586244: 1 + 2586245: 2 + 2586244: fin + 2586245: 1 + 2586245: fin + ``` + On utilisera `fork` et wait`. + +3. Écrivez une version de `paraexec` qui prend un argumant supplémentaire N entre prog et arg1 qui indique + le nomnre maximum d'instancesde prog à lancer en parallèle. Lorsque ce nombre est atteint, `parexec` doit attendre la + fin d'un de ses fils pour en relancer un nouveau. + +4. Modifiez votre programme `paraexec` pour que si une des instances de `prog` se termine anormalement alors il tue immédiatement + toutes les instances puis il quitte. + Pour testez, vous pouvez à la console envoyer un signal à un processus executé par `parexec`, ou dans rebours faire une division par + zéro, ou utilisé `abort`. + + Utilisez `kill`, `WIFSIGNALED` + #### Ex2 Pour calculer le nombre $\pi$, on utilise la méthode de Monte-Carlo. On tire aléatoirement des couples $(x,y)$ de nombres de