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.

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top