Execute o comando e, em seguida, paralelize outros comandos após a conclusão

1

Estou procurando um único comando in-line para executar /bin/first e, quando ele for concluído, execute o seguinte /bin/p1 , /bin/p2 , /bin/p3 em paralelo depois.

    
por Justin 17.09.2017 / 07:00

2 respostas

3

Quando você inicia e executa comandos em segundo plano a partir de um shell script adicionando um & ao comando, eles serão executados quase que completamente em paralelo porque o script não precisará esperar até que o comando conclui antes de executar a próxima linha no script.

#!/bin/bash 
/bin/first
/bin/p1 &
/bin/p2 &
/bin/p3 

Observação: quando o script conclui p1 e p2 ainda pode estar sendo executado em segundo plano!

Para aliviar que seu script se torne um pouco mais complexo, você precisará capturar os PIDs e wait para eles:

#!/bin/bash 
/bin/first
/bin/p1 &
PID1=$!
/bin/p2 & 
PID2=$!
/bin/p3 & 
PID3=$!  
for PIDS in $PID1 $PID2 $PID3 ;
do
  wait $PIDS
done

Esse loop só é necessário se você quiser fazer algum tratamento de erros e verificar o código de saída dos programas executados em paralelo. Caso contrário, um simples wait sem nenhum argumento também aguardará que todos os processos filhos sejam finalizados.

    
por 17.09.2017 / 08:25
1

Se você precisa ter certeza de que a saída não se mistura:

/bin/first
parallel ::: /bin/p1 /bin/p2 /bin/p3
    
por 17.09.2017 / 18:58