Comando Bash `wait`, aguardando mais de 1 PID para concluir a execução
Postei recentemente uma pergunta perguntando se era possívelimpedir que os PID sejam reutilizados.
Até agora, a resposta parece ser não. (O que é bom.)
No entanto, o usuárioDiego Torres Milano adicionei uma resposta a essa pergunta, e minha pergunta aqui é referente a essa resposta.
Diego respondeu:
Se você tem medo de reutilizar PIDs, o que não acontecerá se você esperar como outras respostas explicam, você pode usar
echo 4194303 > /proc/sys/kernel/pid_max
para diminuir o seu medo ;-)
Na verdade, eu não entendo por que Diego usou o número4194303
aqui, mas isso é outra questão.
Meu entendimento era que eu tinha um problema com o seguinte código:
for pid in "${PIDS[@]}"
do
wait $pid
done
O problema é que tenho vários PIDs em uma matriz e que o loop for executará owait
comando sequencialmente com cada PID na matriz, no entanto, não posso prever que os processos serão concluídos na mesma ordem em que seus PIDs são armazenados nessa matriz.
ie; Os seguintespoderia acontecer:
Comece a aguardar PID no índice de matriz 0Processo com PID no índice 1 da matriz terminaNovos trabalhos são executados no sistema, resultando no PID armazenado no índice 1 da matriz PIDreutilizado para outro processowait
termina como PID na saída do índice 0 da matrizComece a aguardar o PID no índice de matriz 0,exceto que agora é um processo diferente e não temos ideia do que éO processo executado que reutilizou o PID quewait
está atualmente esperando porNunca termina. Talvez seja o PID de um servidor de email ou algo que um administrador do sistema iniciou.wait
continua esperando até que o próximo bug grave do linux seja encontrado e o sistema seja reiniciado ou haja uma queda de energiaDiego disse:
o que não acontecerá se você esperar como outras respostas explicam
ie; que a situação que descrevi acima não pode acontecer.
Diego está correto?
Se sim, por que a situação descrita acima não pode ocorrer?Ou Diego não está correto?
Se sim, então eu posto uma nova pergunta hoje mais tarde ...Notas AdicionaisOcorreu-me que essa pergunta pode ser confusa, a menos que você saiba que os PIDs são PIDs de processos lançados em segundo plano. ie;
my_function &
PID="$!"
PIDS+=($PID)