Pour tirer parti de la puissance des systèmes Unix, il est souvent nécessaire d’exécuter des scripts ou des commandes en parallèle. Cela permet d’optimiser les performances et de réduire le temps d’attente, surtout lorsque vous avez plusieurs tâches à accomplir. Voici un aperçu détaillé des différentes méthodes pour réaliser cela.
Modes d’exécution de commandes en parallèle
L’exécution de plusieurs commandes simultanément sous Unix peut se faire de différentes manières. L’une des méthodes les plus simples consiste à utiliser le symbole « & » pour envoyer des processus en arrière-plan. Ainsi, une commande suivie de « & » démarre immédiatement et permet à l’utilisateur de continuer à travailler dans le shell sans être bloqué par la tâche en cours.
Comment exécuter un script parallèle sous Unix ?
Pour exécuter plusieurs scripts ou commandes en parallèle, vous pouvez créer un simple script shell. Voici comment procéder :
#!/bin/bash for cmd in "$@"; do echo "Démarrage du processus : $cmd" $cmd & # Lancer la commande en arrière-plan pid=$! # Capturer l'ID du processus PID_LIST+=($pid) # Ajouter à la liste des processus done trap "kill ${PID_LIST[@]}" SIGINT # Tuer les processus en cas d'interruption echo "Tous les processus ont été lancés." wait ${PID_LIST[@]} # Attendre la fin de tous les processus echo "Tous les processus sont terminés."
Enregistrez ce code dans un fichier, par exemple `parallel_commands.sh`, et rendez-le exécutable avec la commande `chmod +x parallel_commands.sh`. Vous pourrez alors exécuter vos commandes simplement en fournissant leurs noms comme arguments du script.
Exécution de plusieurs scripts en parallèle
Pour exécuter différents scripts en parallèle, il est essentiel de lancer chaque script dans un processus distinct. Cela peut être réalisé en utilisant le même symbole « & ». Par exemple :
./script1.sh & ./script2.sh & wait # Attend que tous les processus en arrière-plan se terminent
En utilisant cette méthode, chaque script démarre indépendamment et continue d’exécuter en parallèle sans attente de la part de l’utilisateur.
Utiliser ‘xargs’ pour exécuter des commandes parallèles
Une autre manière efficace d’exécuter des commandes en parallèle consiste à utiliser `xargs`. En utilisant `xargs -P`, vous pouvez spécifier le nombre de processus parallèles à lancer. Par exemple :
echo "file1.txt file2.txt file3.txt" | xargs -n 1 -P 3 ./process_file.sh
Dans cet exemple, `process_file.sh` sera exécuté pour chaque fichier avec jusqu’à 3 instances en parallèle.
Attendre la fin des processus
Après avoir lancé plusieurs processus en arrière-plan, il est souvent nécessaire d’attendre leur achèvement. La commande `wait` est utilisée à cette fin. Si vous omettez d’utiliser `wait`, le shell continuera à traiter les commandes suivantes sans attendre la fin des tâches lancées en arrière-plan, ce qui pourrait être problématique si ces tâches dépendent des résultats des scripts précédents.
FAQ
- Qu’est-ce que le symbole ‘&’ dans un script shell ?
Cela indique que la commande doit être exécutée en arrière-plan, permettant au shell de reprendre immédiatement le contrôle. - Comment puis-je tuer tous les processus en arrière-plan ?
Vous pouvez utiliser la commande `kill` suivie de l’ID des processus ou utiliser `trap` pour gérer cela en cas d’interruption. - Puis-je exécuter des scripts Python en parallèle ?
Oui, vous pouvez exécuter plusieurs instances de scripts Python à la fois en utilisant les méthodes mentionnées ci-dessus.