Esegui più programmi contemporaneamente in uno script di inizializzazione / bash
Domanda
Ciao, sto lavorando con un simulatore che usa gli script rcS per l'avvio, questo è il mio script
cd /tests
./test1 &
./test2 &
./test3 &
./test4
exit
Quello che voglio è eseguire tutti i test contemporaneamente e che il comando exit sia eseguito solo al termine di tutti i test precedenti. E non solo quando il test 4 è terminato, è possibile ?. Grazie.
Soluzione
Puoi usare wait:
./test1 &
./test2 &
./test3 &
./test4 &
wait
Dalla pagina man di bash:
wait [n ...] Attendere ogni processo specificato e restituirlo stato di terminazione. Ogni n può essere a ID processo o specifica del lavoro; Se viene fornita una specifica di lavoro, tutti i processi in la pipeline di quel lavoro è attesa. Se n non viene dato, tutti i processi figlio attualmente attivi sono attesi e lo stato di ritorno è zero. Se n specifica un processo inesistente o lavoro, lo stato di ritorno è 127. Altrimenti, lo stato di ritorno è il stato di uscita dell'ultimo processo o lavoro attesi.
Altri suggerimenti
xargs
può supportare il parallelo
Quindi, proprio così:
seq 4|xargs -i -n 1 -P 4 ./test{}
Qualcosa sulla falsariga di
cd /tests
./test1 &
./test2 &
./test3 &
./test4 &
wait
exit
(suppongo bash shell)