Pregunta

Hola, estoy trabajando con un simulador que utiliza scripts rcS para arrancar, este es mi script

cd /tests
./test1 &
./test2 &
./test3 &
./test4 
exit

Lo que quiero es ejecutar toda la prueba al mismo tiempo y que el comando de salida se ejecute solo cuando todas las pruebas anteriores hayan terminado. Y no solo cuando la prueba 4 ha terminado, ¿es esto posible? Gracias.

¿Fue útil?

Solución

Puedes usar esperar:

./test1 &
./test2 &
./test3 &
./test4 &
wait

Desde la página de manual de bash:

  

espera [n ...]                 Espere cada proceso especificado y devuelva su   estado de terminación. Cada n puede ser un   ID de proceso o una especificación de trabajo; Si   se da una especificación de trabajo, todos los procesos en   se espera la tubería de ese trabajo.   Si no se da n,                 se esperan todos los procesos secundarios actualmente activos, y   El estado de retorno es cero. Si n   especifica un proceso inexistente o   trabajo, el estado de devolución es 127.   De lo contrario, el estado de devolución es el   estado de salida de la última                 proceso o trabajo esperado.

Otros consejos

xargs puede soportar paralelo

Así que así:

seq 4|xargs -i -n 1 -P 4 ./test{} 

Algo en la línea de

cd /tests
./test1 &
./test2 &
./test3 &
./test4 &
wait
exit

(supongo que bash shell)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top