¿Cómo se ejecutan varios programas en paralelo desde un script bash?

Resuelto Betamoo asked hace 14 años • 19 respuestas

Estoy intentando escribir un archivo .sh que ejecute muchos programas simultáneamente

Probé esto

prog1 
prog2

Pero eso ejecuta prog1, luego espera hasta que finalice prog1 y luego inicia prog2...

Entonces, ¿cómo puedo ejecutarlos en paralelo?

Betamoo avatar Jun 09 '10 17:06 Betamoo
Aceptado

Qué tal si:

prog1 & prog2 && fg

Esta voluntad:

  1. Comenzar prog1.
  2. Envíelo al fondo, pero siga imprimiendo su resultado.
  3. Inicie prog2y manténgalo en primer plano para poder cerrarlo con ctrl-c.
  4. Cuando cierres prog2, volverás al prog1primer plano , por lo que también podrás cerrarlo con ctrl-c.
Ory Band avatar Apr 05 '2011 14:04 Ory Band

Para ejecutar varios programas en paralelo:

prog1 &
prog2 &

Si necesita que su script espere a que finalicen los programas, puede agregar:

wait

en el punto donde desea que el script los espere.

psmears avatar Jun 09 '2010 10:06 psmears

Si desea poder ejecutar y eliminar fácilmente varios procesos con ctrl-c, este es mi método favorito: generar múltiples procesos en segundo plano en un (…)subshell y capturar SIGINTpara ejecutar kill 0, lo que eliminará todo lo generado en el grupo de subshell:

(trap 'kill 0' SIGINT; prog1 & prog2 & prog3)

Puede tener estructuras de ejecución de procesos complejas y todo se cerrará con un solo proceso ctrl-c(solo asegúrese de que el último proceso se ejecute en primer plano, es decir, no incluya un &después prog1.3):

(trap 'kill 0' SIGINT; prog1.1 && prog1.2 & (prog2.1 | prog2.2 || prog2.3) & prog1.3)

Si existe la posibilidad de que el último comando se cierre antes y desea mantener todo lo demás en ejecución, agréguelo waitcomo último comando. En el siguiente ejemplo, sleep 2habría salido primero y habría matado sleep 4antes de terminar; agregar waitpermite que ambos se ejecuten hasta su finalización:

(trap 'kill 0' SIGINT; sleep 4 & sleep 2 & wait)
Quinn Comendant avatar Aug 27 '2018 06:08 Quinn Comendant