Todas essas soluções são testadas no Ubuntu 14.04:
Solução 1 (usando o comando ps):
Apenas para adicionar a resposta de Pierz, sugiro:
while ps axg | grep -vw grep | grep -w process_name > /dev/null; do sleep 1; done
Nesse caso, grep -vw grep
garante que o grep corresponda apenas ao process_name e não ao próprio grep. Tem a vantagem de suportar os casos em que o process_name não está no final de uma linha em ps axg
.
Solução 2 (usando o comando top e o nome do processo):
while [[ $(awk '$12=="process_name" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Substitua process_name
pelo nome do processo que aparece em top -n 1 -b
. Por favor, mantenha as aspas.
Para ver a lista de processos que você espera que sejam concluídos, você pode executar:
while : ; do p=$(awk '$12=="process_name" {print $0}' <(top -n 1 -b)); [[ $b ]] || break; echo $p; sleep 1; done
Solução 3 (usando o comando superior e o ID do processo):
while [[ $(awk '$1=="process_id" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Substitua process_id
pelo ID do processo do seu programa.