In modern operating systems, processes naturally run in parallel, and having one waiting for the termination of another is the special case. When the &
syntax was designed in the late 60's this was different. Then you had to mark a parallel execution.
On a shell this sticks up to today, also because it is convenient in many cases to have the shell wait for the termination of a command before allowing the next input from the user, so there still is the case without &
waiting for the termination.
On the programming level the case with the &
(parallel execution) is the normal case and nothing has to be done to achieve it.
The case without the &
(waiting for termination) can be achieved by using the wait()
system call explicitly (this is what the shell does in most cases).
For you, just use Popen
and don't call wait()
;-)