We generally run jobs in bash in serial order. Serial order means one command runs and after completion other command starts. There is another way to run jobs which are named parallel. Running parallel means multiple jobs run at the same time side by side.
Send Job To The Background
We will start with a simple example where two ping commands will be run in the background at the same time. We will add &
to the end of each command. We will ping two domain names google.com
and poftut.com
.
$ ping google.com & ping poftut.com &

We can see from the output that after the command is issued we have two lines which show the commands processes and their related PID and there is also information about the background jobs in square brackets job id. Both commands will start in the background and will resume up to kill operation or exit.
Wait Before Running New Job
In some cases, we may need to wait before running multiple parallel jobs. We can use the bash wait
function to wait for finish previously started jobs. In this example, we will run jobs j1
and j2
before running j3
. But we will wait to complete jobs j1
and j2
before running j3
job in the background.
j1 & j2 & wait j3 &
GNU Parallel
GNU Parallel is a very useful tool that can start multiple jobs in a parallel way. We will use the command parallel
and specify the jobs we want to run after :::
. In this example, we will run ping poftut.com
and ping google.com
commands in parallel which will output the same time.
$ parallel ::: "ping poftut.com" "ping google.com"
How To Run Parallel Jobs/Process/Programs in Bash Infographic
