Antecedentes vs tarea en primer plano y tareas en ejecución en paralelo

Como soy nuevo en Linux, me disculpo si no uso la terminología correcta.

Estoy intentando ejecutar varias tareas en paralelo (usando el operador shell de background). Sin embargo, primero necesito ejecutar dos tareas en paralelo (seguidas después de la finalización) por el rest de las tareas que dependen del resultado de las dos primeras.

Por ejemplo, suponga que las tareas A.1 y A.2 pueden ejecutarse en paralelo (sin dependencia entre ellas) y producir algunos files que serán utilizados por las tareas B.1 , B.2 y B.3 . Todas las tareas B son independientes; sin embargo, no pueden comenzar hasta que terminen A.1 y A.2 para ver los files. Con esto en mente, se me ocurrieron los siguientes scripts de shell:

script1 tiene las siguientes líneas:

 ./A.1 & ./A.2 & 

script2 tiene las siguientes líneas:

 ./B.1 & ./B.2 & ./B.3 & 

script3 simplemente llama a los scripts 1 y 2 secuencialmente (es decir, sin el operador & ) de la siguiente manera:

 ./script1 ./script2 

No estoy seguro si script3 es lo que estoy buscando. ¿Lo estoy haciendo bien? En otras palabras, ¿ script2 esperará hasta que script1 finalice y luego comience?

Related of "Antecedentes vs tarea en primer plano y tareas en ejecución en paralelo"

No, eso no hará lo que quieras. Pero en realidad es más simple que eso.

En primer lugar, en un nivel simple, su análisis es correcto. Si script3 dice

 ./script1 ./script2 

entonces, sí, script3 esperará a que script1 termine, y luego comenzará script2 . El problema es que script1 "terminará" esencialmente de forma inmediata, es decir, en la cantidad de time necesaria para engendrar los dos processs A , y así los commands B se iniciarán mientras los commands A aún se estén ejecutando. No es lo que quieres

La solucion es

 ./A.1 & ./A.2 & wait ./B.1 & ./B.2 & ./B.3 & 

El command de wait (como su nombre indica) espera a que los processs asynchronouss existentes finalicen antes de continuar.

El command de wait debe ser ejecutado por el mismo shell que generó los processs A Podría poner los seis commands en un solo script, o los primeros tres en uno y los últimos tres en otro, o varias otras combinaciones.

Además, es posible que desee hacer una wait después de los commands B , también.