BASH: executa comandos de forma assíncrona em um atraso

6

Efetivamente, o que estou tentando realizar é o seguinte, em que cmd1 demora um pouco para ser executado (~ 1 minuto) e cmd2 retorna quase instantaneamente sempre que executado:

  1. cmd1 começa
  2. espere um pouco (~ 10 segundos)
  3. cmd2 é executado
  4. espere mais um pouco
  5. o cmd2 é executado novamente
  6. algum tempo passa
  7. cmd1 termina

É essencial que este seja roteirizado, pois ele tem que entrar em um loop bastante grande, que executa o cmd1 com muitos parâmetros diferentes e, em seguida, faz o mesmo novamente para vários outros comandos de execução longa.

Como posso conseguir isso?

    
por Mala 03.08.2011 / 07:51

1 resposta

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

explicação: cmd1 & lança um processo no fundo do shell. a variável $! contém o pid desse processo em segundo plano. o shell continua processando os outros cmds. sleep 10 significa 'aguarde um pouco'. OP apenas quer acionar cmd2 em ordem linear para que a parte seja trivial. no final do trecho de script, apenas esperamos que cmd1 termine (pode até ser concluído antes) com wait $cmd1_pid .

    
por 03.08.2011 / 07:55

Tags