Depois de clicar na janela Prompt de Comando, o host do console não permitirá mais que a saída seja gravada. O aplicativo em si continua sendo executado, mas nada é gravado na tela.
Naturalmente, desde que haja apenas um único thread, isso é basicamente a mesma coisa que ter seu processo congelado. Como o thread único tenta escrever alguma saída antes de fazer mais trabalho.
Se eu executar ping -t localhost
e clicar na janela do prompt de comando, posso inspecionar a pilha de chamadas do thread principal ping.exe
com Process Explorer .
Podemosverqueping.exe
tentouescreveralgumasaída.Elechamouwrite()
nabibliotecadetempodeexecuçãoC.Essafunção,emalgummomento,chama GetConsoleMode . Ao que parece, essa função irá verificar se o usuário está atualmente no modo de marcação e bloquear a execução, se necessário.
Análises adicionais
Podemos comprovar esse comportamento examinando o comportamento de ping
com Wireshark
Ao executar ping -t superuser.com
, vemos a seguinte saída no Wireshark:
Agora,vamosmarcarumacaixanopromptdecomando.
De repente, não há mais pings registrados no Wireshark. ping
não está mais enviando nenhum pacote.
Mas nós já sabíamos disso ...
Certo, vamos ver se a saída é realmente a questão aqui! Vamos direcionar a saída para o NUL
device:
Agora,nãohámaissaída.Agorapodemosmarcarotextonacaixaodiainteiro,ospacotesserãoregistradosnoWireshark.