Este script bash es para N subprocesos paralelos. Cada argumento es un comando.
trap
eliminará todos los subprocesos cuando se capture SIGINT.
wait $PID_LIST
está esperando que se complete cada proceso. Cuando todos los procesos se han completado, el programa sale.
#!/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";
Guarde este script como parallel_commands
y hacerlo ejecutable.
Así es como se usa este script:
parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
Ejemplo:
parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
Inicie 4 sueño paralelo y espere hasta que termine "dormir 4".
Basado en el comentario de @alessandro-pezzato. Ejecute múltiples comandos usando &
entre los comandos.
Ejemplo:
$ sleep 3 & sleep 5 & sleep 2 &
Ejecutará los comandos en segundo plano.
Usar GNU paralelo:
(echo command1; echo command2) | parallel
parallel ::: command1 command2
Matar:
parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID