Ejecute varios programas al mismo tiempo en un script de inicialización / bash
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.
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)