BASH: ejecutar comandos de forma asincrónica con retraso

Pregunta:

Efectivamente, lo que estoy tratando de lograr es lo siguiente, donde cmd1 tarda un poco en ejecutarse (~ 1 minuto) y cmd2 regresa casi instantáneamente cada vez que se ejecuta:

  1. cmd1 comienza
  2. espera un poco (~ 10 segundos)
  3. cmd2 se ejecuta
  4. espera un poco de nuevo
  5. cmd2 se ejecuta de nuevo
  6. pasa un tiempo
  7. cmd1 acabados

Es esencial que se escriba en un script, ya que tiene que ir dentro de un bucle bastante grande, que ejecuta cmd1 con muchos parámetros diferentes, y luego hace lo mismo de nuevo para varios otros comandos de ejecución larga.

¿Cómo puedo lograr esto?

Respuesta:

cmd1 &
cmd1_pid=$!
sleep 10
cmd2
sleep 10
cmd2
wait $cmd1_pid

explicación: cmd1 & lanza un proceso en el fondo del shell. el $! La variable contiene el pid de ese proceso en segundo plano. el shell sigue procesando los otros cmds. sleep 10 significa "esperar un poco". OP solo quiere disparar cmd2 en orden lineal para que esa parte sea trivial. al final del fragmento de secuencia de comandos, solo esperamos a que cmd1 termine (incluso podría terminar antes) con wait $cmd1_pid .

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım