Dieses Bash-Skript ist für N parallele Threads. Jedes Argument ist ein Befehl.
trap
wird alle Unterprozesse beenden, wenn SIGINT abgefangen wird.
wait $PID_LIST
wartet auf den Abschluss jedes Prozesses. Wenn alle Prozesse abgeschlossen sind, wird das Programm beendet.
#!/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";
Speichern Sie dieses Skript unter parallel_commands
und ausführbar machen.
So verwenden Sie dieses Skript:
parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
Beispiel:
parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
Starten Sie 4 parallelen Schlaf und warten Sie, bis "Schlaf 4" beendet ist.
Basierend auf dem Kommentar von @alessandro-pezzato. Führen Sie mehrere Befehle aus, indem Sie &
verwenden zwischen den Befehlen.
Beispiel:
$ sleep 3 & sleep 5 & sleep 2 &
Es führt die Befehle im Hintergrund aus.
Verwenden Sie GNU Parallel:
(echo command1; echo command2) | parallel
parallel ::: command1 command2
Töten:
parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID