Tento bash skript je pro N paralelních vláken. Každý argument je příkaz.
trap
zabije všechny podprocesy, když je zachycen SIGINT.
wait $PID_LIST
čeká na dokončení každého procesu. Po dokončení všech procesů se program ukončí.
#!/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";
Uložte tento skript jako parallel_commands
a učinit jej spustitelným.
Tento skript se používá takto:
parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
Příklad:
parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
Zahajte 4 paralelní režim spánku a počkejte, dokud neskončí „spánek 4“.
Na základě komentáře @alessandro-pezzato. Spusťte vícenásobné příkazy pomocí &
mezi příkazy.
Příklad:
$ sleep 3 & sleep 5 & sleep 2 &
Bude provádět příkazy na pozadí.
Použijte GNU Parallel:
(echo command1; echo command2) | parallel
parallel ::: command1 command2
Zabít:
parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID