Ce script bash est pour N threads parallèles. Chaque argument est une commande.
trap
tuera tous les sous-processus lorsque SIGINT sera intercepté.
wait $PID_LIST
attend la fin de chaque processus. Lorsque tous les processus sont terminés, le programme se ferme.
#!/bin/bash
for cmd in "[email protected]"; do {
echo "Process \"$cmd\" started";
$cmd & pid=$!
PID_LIST+=" $pid";
} done
trap "kill $PID_LIST" SIGINT
echo "Parallel processes have started";
wait $PID_LIST
echo
echo "All processes have completed";
Enregistrez ce script sous parallel_commands
et le rendre exécutable.
Voici comment utiliser ce script :
parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
Exemple :
parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
Démarrez 4 veilles parallèles et attendez que "sommeil 4" se termine.
Basé sur le commentaire de @alessandro-pezzato. Exécutez plusieurs commandes en utilisant &
entre les commandes.
Exemple :
$ sleep 3 & sleep 5 & sleep 2 &
Il exécutera les commandes en arrière-plan.
Utiliser GNU parallèle :
(echo command1; echo command2) | parallel
parallel ::: command1 command2
Pour tuer :
parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID