Experimenta adicionar
>> /dev/null & no final de cada comando.
O /dev/null apenas está lá pra não poluir o ecran com o output, mas se quiseres omite essa parte ou até redireccionar o output de cada processo para um ficheiro de texto com o
>>nome_ficheiro e redireccionar o output de cada processo para o respectivo ficheiro.
O mais importante é mesmo o & no final que indica que o comando é para ser executado em background e assim a shell não espera pelo seu fim para poder iniciar outro processo.
Para testar criei um simples programa em C que apenas fazia um sleep(60) ( a.out ) e o seguinte script:
#!/bin/bash
./a.out >> /dev/null&
./a.out >> /dev/null&
./a.out >> /dev/null&
./a.out >> /dev/null&
Ao executar o
ps para ver se estavam todos a correr obtive:
PID TTY TIME CMD
13166 pts/0 00:00:00 bash
13316 pts/0 00:00:00 a.out
13317 pts/0 00:00:00 a.out
13318 pts/0 00:00:00 a.out
13319 pts/0 00:00:00 a.out
13320 pts/0 00:00:00 ps
O que indica que estão os 4 em execução, logo: funciona!
No teu caso recomendo:
mp4live --automatic --file-cam_cfg1 >>fich1.txt &
mp4live --automatic --file-cam_cfg2 >>fich2.txt &
mp4live --automatic --file-cam_cfg3 >>fich3.txt &
E ficas com o output de cada processo num ficheiro diferente, isto se o comando tiver algum output (desconheço o funcionamento dele).