tp4
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
rebours seconde après seconde à partir d'un nombre passé en arguments. Sur
|
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.
|
chaque ligne, rebours affiche son pid et le nombre de secondes restantes.
|
||||||
```bash
|
```bash
|
||||||
[denis@portabledenis SYS-TP1]$ ./rebours 5
|
[denis@portabledenis src]$ ./rebours 5
|
||||||
2576552: debut
|
2576552: debut
|
||||||
2576552: 5
|
2576552: 5
|
||||||
2576552: 4
|
2576552: 4
|
||||||
@@ -18,6 +18,39 @@
|
|||||||
```
|
```
|
||||||
On utilisera `getpid` et `sleep`.
|
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
|
#### Ex2
|
||||||
Pour calculer le nombre $\pi$, on utilise la méthode de Monte-Carlo.
|
Pour calculer le nombre $\pi$, on utilise la méthode de Monte-Carlo.
|
||||||
On tire aléatoirement des couples $(x,y)$ de nombres de
|
On tire aléatoirement des couples $(x,y)$ de nombres de
|
||||||
|
|||||||
Reference in New Issue
Block a user