Seu loop inicia uma única sessão de shell interativa em cada iteração.
A sessão interativa fornece um prompt (já que é interativo). Ao sair, ele retorna o controle para o loop, que inicia outro shell interativo.
É por isso que você não obtém grandes quantidades de bash
processos de uma vez, apenas dois, o pai que executa o loop e o filho que fornece o novo prompt.
O loop também pode ser escrito
while true; do bash; done
O utilitário true
não recebe um argumento, apenas retorna um valor de saída zero que é interpretado como "true" pelo shell.
Se você quisesse uma explosão de bash
processos (a chamada "fork-bomb"), você pode ter escrito
while true; do { bash & }; done
Isso iniciaria uma sessão bash
interativa em cada iteração do loop, mas como processa em segundo plano . Como as sessões são iniciadas como processos em segundo plano, o loop não esperará o último processo bash
terminar antes de iniciar o próximo.
Você pode ter que reiniciar seu sistema para se recuperar disso.
Esta fork-bomb é mais benigna do que poderia ser, já que só inicia um novo processo em cada iteração. Outros podem iniciar processos de maneira exponencial.