Separating commands with a semi-colon is just like pressing return, so this:
command1 ; command2
...would run command1, wait for it to finish and then run command2, wait for that to finish and then give you your prompt back.
If you want to run command1 and command2 in parallel, you can do it with the &, but you don't need the semi-colon:
command1 & command2
Which will run command1 in the background, run command2 in the foreground, and give you the prompt back when command2 is complete. note that command1 may terminate before command2, but you'll not get the notification until command2 is complete. It could also keep running after you get the prompt back. To check the status of backgrounded jobs, you can type jobs
You could put them both in the background like this:
command1 & command2 &
...which will put them both in the background and give you the prompt back straight away. There is a special command called wait
which waits until all background processes are complete, and then gives you the prompt back. So this command:
command1 & command2 & wait
Will launch command1 and command2, and wait until both are complete.