Run parallel multiple commands at once in the same terminal
This bash script is for N parallel threads. Each argument is a command.
trap
will kill all subprocesses when SIGINT is catched.
wait $PID_LIST
is waiting each process to complete.
When all processes have completed, the program exits.
#!/bin/bash
for cmd in "$@"; 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";
Save this script as parallel_commands
and make it executable.
This is how to use this script:
parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
Example:
parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
Start 4 parallel sleep and waits until "sleep 4" finishes.
Based on comment of @alessandro-pezzato.
Run multiples commands by using &
between the commands.
Example:
$ sleep 3 & sleep 5 & sleep 2 &
It's will execute the commands in background.
Use GNU Parallel:
(echo command1; echo command2) | parallel
parallel ::: command1 command2
To kill:
parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID