Introdução:
Aqui está um script que criei que pesquisa processos em segundo plano no bash para um dos meus projetos que não apenas espera que todos os processos sejam concluídos usando a “espera” padrão, mas também mantém controle do tempo gasto para a conclusão, certifique-se de não pesquisar o concluídos e, finalmente, retornar o número de processos com falha.
Então aqui está e eu realmente aprecio qualquer feedback!
Idéia:
A função obtém uma lista de PIDs e um intervalo de pesquisa em segundos. À medida que o intervalo passa cada vez que um sinal de eliminação é enviado apenas para os processos em execução no momento. Um código de saída diferente de zero indica que o processo não está mais ativo – o que significa que foi concluído com êxito ou falhou. Nesse momento, aguardando aquele PID, o código de saída do processo é obtido. Isso ajuda a controlar a contagem com falha.
#!/bin/sh
STIME=$(date '+%s')
#Poll parallel running processes
#param 1: list of pid's (space delimited)
#param 2: polling interval (secs)
#return value: integer (number of failed processes)
function poll {
local etime=
local elapsed_sec=
local fail=0
local running_pid_list=$1
local interval=$2
while sleep $interval
do
poll_pid_list=$running_pid_list
if [[ -n $poll_pid_list ]]
then
echo "polling $poll_pid_list"
running_pid_list=
for pid in $poll_pid_list
do
kill -0 $pid 2>/dev/null
if [ $? -ne 0 ]
then
wait $pid
if [[ $? -ne 0 ]]
then
((fail++))
else
etime=$(date '+%s')
elapsed_sec=$((etime - STIME))
echo $pid completed after $elapsed_sec seconds at $etime
fi
else
running_pid_list="$running_pid_list $pid"
fi
done
else
break
fi
done
return $fail
}
#Execute process in parallel as background processes
pid_list=
poll_interval=2
# Process 1
sleep 5 &
pid_list="$pid_list $!"
# Process 2
sleep 10 &
pid_list="$pid_list $!"
poll "$pid_list" $poll_interval
echo "Number of failed processes:$?"
No script acima, estou executando dois processos (suspensão) em paralelo com um intervalo de pesquisa definido de 2 segundos. No meu projeto, na verdade, escrevo as estatísticas em um arquivo (não mostrado acima) em um formato que posso ler mais tarde usando “awk” e é um mecanismo de registro muito útil.
Boa votação!