Como posso esperar que um processo em segundo plano seja concluído?

0

Estou usando o Amazon Linux com o bash shell. Eu gostaria de executar alguns processos em segundo plano e esperar que eles sejam concluídos (com um código de saída de êxito ou erro) antes de prosseguir. Então eu tentei:

node test.js 2>&1 | tee --append $TFILE1 &
proc1=$!
node SkyLocal.js 2>&1 | tee --append $TFILE2 &
proc2=$!

wait proc1
rc1=$?
wait proc2
rc2=$?

mas estou recebendo esses erros:

/home/jboss/.jenkins/jobs/myproject/workspace/automated-tests/nodejs/run_tests.sh: line 36: wait: 'proc1': not a pid or valid job spec
/home/jboss/.jenkins/jobs/myproject/workspace/automated-tests/nodejs/run_tests.sh: line 38: wait: 'proc2': not a pid or valid job spec

Como faço para capturar o PID do processo em segundo plano e aguarde o processo ser concluído antes de continuar?

    
por Dave 25.01.2017 / 16:17

1 resposta

3

Como as mensagens de erro sugerem, o comando wait não tentará procurar o pid pelo nome da variável para você (embora, como um built-in, teoricamente possa fazê-lo).

Você precisa passar wait dos valores reais de pid (ou números de trabalho) como armazenados nas variáveis proc1 e proc2. Você faz isso inserindo $ nos nomes das variáveis como de costume. Isso fará com que o shell substitua os valores dos nomes das variáveis antes de passá-los para o comando wait .

    
por 25.01.2017 / 16:44