Como contar subprocessos que atingiram determinado estado

3

Eu tenho um script bash que lança os subprocessos > 20 (funções lançadas com & em segundo plano) e deseja incluir um indicador de progresso que informe ao usuário quantos desses subprocessos já estão sendo executados.

O problema é que esses subprocessos precisam de algum tempo para inicializar (~ 20 segundos, dependendo da rede). Existe uma maneira que eu poderia contar o número de subprocessos que já foram inicializados com sucesso?

Eu posso colocar qualquer código na função bash que será executada quando o subprocesso estiver pronto. No entanto, eu não sei uma boa maneira de incrementar a variável global que está mantendo a quantidade de trabalhos que estão prontos.

    
por Max Matti 20.03.2017 / 03:11

1 resposta

0

Você pode usar um arquivo externo como sua variável global. Aqui está um exemplo.

file="$(mktemp)"
f() { sleep 3; echo x; sleep 3; }
for i in {1..10} ; do
    >>"$file" f &
done

switch=true
while $switch; do
    sleep 1
    cnt=$(wc -l "$file")
    cnt="${cnt%%${file}}"    #this is needed to remove the file name
                             #from the output of wc -l
    echo "$cnt"
    [ "$cnt" -ge 5 ] && switch=false
done
rm "$file"

Salvar isso em example e o sourcing fornece isso:

$ . example
0
0
10

Quando você tiver acesso a

cnt=$(wc -l "$file")
cnt="${cnt%%${file}}"

é fácil refazer esse código em uma barra de progresso.

Não se esqueça de ajustar o eterno loop breaker [ "$cnt" -ge 5 ] && switch=false à sua situação.

    
por 23.01.2018 / 12:08