Questo script bash è per N thread paralleli. Ogni argomento è un comando.
trap
ucciderà tutti i sottoprocessi quando SIGINT viene rilevato.
wait $PID_LIST
è in attesa del completamento di ogni processo. Quando tutti i processi sono stati completati, il programma si chiude.
#!/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";
Salva questo script come parallel_commands
e renderlo eseguibile.
Ecco come usare questo script:
parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
Esempio:
parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
Avvia 4 sospensioni parallele e attendi fino al termine di "sleep 4".
Basato sul commento di @alessandro-pezzato. Esegui più comandi usando &
tra i comandi.
Esempio:
$ sleep 3 & sleep 5 & sleep 2 &
Eseguirà i comandi in background.
Usa GNU Parallel:
(echo command1; echo command2) | parallel
parallel ::: command1 command2
Per uccidere:
parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID