Você está misturando dois casos diferentes:
-
foo ; bar
será executado foo, espere que ele termine e execute a barra -
foo & bar
vai começar foo, colocar em segundo plano e começar a barra logo em seguida.
Você tem que decidir, use um ou outro. Você não pode fazer as duas coisas. ;)
Para resolver o problema, você pode simplesmente executar todos os trabalhos em segundo plano e usar job
para listar os pids:
michas@lenny:~$ sleep 10 &
[1] 18007
michas@lenny:~$ sleep 10 &
[2] 18011
michas@lenny:~$ sleep 10 &
[3] 18015
michas@lenny:~$ sleep 10 &
[4] 18019
michas@lenny:~$ sleep 10 &
[5] 18026
michas@lenny:~$ jobs -p
18007
18011
18015
18019
18026
michas@lenny:~$
Você também não precisa necessariamente dos pids para enviar sinais de kill. Por exemplo, kill %1
irá matar o primeiro processo em segundo plano.