Lancer des tâches en parallèle
Lancer des tâches de fond avec &, les attendre avec wait en gardant leur code de retour, comprendre le sous-shell et ses variables perdues, borner le parallélisme avec xargs -P et prévoir le gain avec la loi d'Amdahl.
- 35 cartes
- 6 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Les étapes
- Mises en situation
- Comprendre
Quelques cartes du deck
Tâche de fond : de quoi s'agit-il ?
Voir la réponse
Commande lancée avec une esperluette finale : le shell ne l'attend pas et rend la main aussitôt ; la variable $! donne son numéro de processus.
sleep 30 &rend la main tout de suite. Sanswait, un script qui se termine laisse ses tâches de fond derrière lui, sans en connaître le résultat.Qu'affiche ce script Bash ?
```bash
n=0
( n=5 ) & wait
echo $n`051n
Voir la réponse
0( n=5 )s'exécute dans un sous-shell qui travaille sur une copie den: le shell parent garde 0.waitn'y change rien, il attend seulement la fin.La variable $! contient le … de la dernière commande lancée en ….
Voir la réponse
La variable $! contient le PID de la dernière commande lancée en arrière-plan.
Il faut la copier tout de suite (
pid=$!) : le lancement suivant l'écrase.wait : de quoi s'agit-il ?
Voir la réponse
Commande interne qui bloque le shell jusqu'à la fin de tâches de fond ; avec un PID, elle rend le code de retour de cette tâche.
Sans argument, elle attend toutes les tâches et rend toujours 0, quels que soient leurs échecs. Pour détecter une erreur, il faut un
waitpar PID.Sauvegarder quatre serveurs en parallèle et compter les échecs : quelle étape vient après « Lancer chaque sauvegarde avec & dans une boucle » ?
- Parcourir la liste des PID avec une seconde boucle
- Faire wait PID pour chacun et lire son code de retour
- Incrémenter un compteur à chaque code non nul
- Copier $! dans la liste des PID après chaque lancement
Voir la réponse
Copier $! dans la liste des PID après chaque lancement
Les PID doivent être gardés avant de les attendre ; le compteur est incrémenté dans le shell principal, pas dans un sous-shell, pour qu'il survive à la boucle.