O que faz exatamente se eu clicar na janela do cmd?

37

Suponha que eu corra cmd.exe e faça ping localhost. Depois disso eu pingar localhost novamente, mas eu clico na janela e o ping pára até que eu pressione enter .

O que acontece exatamente quando eu clico na janela? Suspender o processo ou algo mais? Anexei uma captura de tela para esclarecer esse problema.

Observação: na verdade, não clico, mas arrasto usando o mouse, o que cria uma caixa branca na janela, como você pode ver na captura de tela.

Editar: mais esclarecimentos: O que eu realmente quero saber é se arrastar a janela interrompe o processo cmd ou não?

Editar: ainda mais esclarecimentos: Eu sei que estou usando a Edição rápida e pressionar Enter copia o conteúdo selecionado. O que eu não sei é o que acontece em segundo plano.

    
por Adam Arold 09.08.2012 / 18:29

7 respostas

24

Quando você seleciona algum texto na janela cmd.exe, o processo continua em segundo plano até a próxima gravação em Standard Output (ou STDOUT, o fluxo de dados mostrado na janela cmd.exe).

Quando você sair do modo de seleção, o processo será retomado normalmente.

Você pode testar isso digitando ping www.google.com -t na sua janela cmd.exe e selecionando alguma área da saída. Você verá a pausa e quando você cancelar a seleção, a saída será retomada.

Editar: De acordo com o comentário de Fran, você pode usar uma ferramenta como o Wireshark para ver que a atividade ainda acontece depois do ponto em que você fez a seleção e depois para.

    
por 09.08.2012 / 18:48
41

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.exetentouescreveralgumasaí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.

    
por 09.08.2012 / 19:45
6

Isso ocorre porque a janela entrou no modo de marcação. Quando você pressiona enter, copia o texto selecionado para a área de transferência. Até onde sei, não há nenhuma configuração para isso, então não sei por que está fazendo isso quando você clica na janela. Normalmente você tem que clicar com o botão direito e apertar "Mark". Verifique se nenhuma tecla está presa no teclado.

    
por 09.08.2012 / 18:32
5

Suas janelas do CMD estão no modo de edição rápida, que entram automaticamente no modo de edição quando você clica na tela. O Enter é para copiar o texto na caixa branca e sair do modo de edição.

Normalmente, o CMD só entra no modo de edição quando você clica com o botão direito na tela preta e escolhe Marcar.

Para voltar ao normal, clique com o botão direito do mouse na barra de título das janelas, escolha Propriedades, selecione a guia Opções e desmarque "Modo de Edição Rápida" e clique em ok.

    
por 09.08.2012 / 18:36
3

Quando você está selecionando o texto para copiar da janela (quando no modo Mark ), o sistema suspende o processo atual nessa janela.

Exemplo de arquivo em lote:

:test
echo %0
goto test

quando isso é executado, assim que marcar a área a ser copiada, a tela pára de rolar

    
por 09.08.2012 / 18:39
1

Como todos já apontaram, o progresso da saída adicional é bloqueado enquanto uma operação de marcação está em andamento. Além disso, usando o clique alternativo do mouse (clique com o botão direito do mouse por padrão) ou pressionando a tecla Enter no teclado, você pode sair do modo de marcação e copiar a seleção marcada no buffer de colagem do Windows. Há outra saída e isso é pressionar a tecla Esc para abandonar a marcação de uma área da tela e liberar o bloco na saída. Isso pressupõe que você tenha o modo de edição rápida selecionado nas propriedades dessa janela de comando. Você também pode entrar nessa situação de maneira mais deliberada, dizendo à janela de comando que deseja selecionar algum texto.

    
por 29.06.2017 / 23:14
0

Para corroborar ainda mais a afirmação de que o processo é interrompido em "Modo de marca", por ex. Durante um clique do mouse ou arraste dentro das bordas da janela do cmd.exe, mas interrompe qualquer operação somente depois de terminar completamente com a instância em andamento, eu ofereço uma prova indireta:

[1378:000f][2018-10-08T13:26:20] END: Verifying package "AndroidEmulator,version=26.0.0.2"
[1378:000f][2018-10-08T13:26:20] BEGIN: Verifying package "AndroidImage_ARM_API23,version=20.0.0.3"
[1378:000f][2018-10-08T13:26:20] Verifying package 'AndroidImage_ARM_API23,version=20.0.0.3'
[1378:000c][2018-10-08T13:26:26] SHA256 verification for 'AndroidImage_x86_API23,version=20.0.0.3\x86-23_r20.zip' succeeded. Hash: X
[1378:0025][2018-10-08T14:09:03] BEGIN: Verifying "AndroidImage_ARM_API23,version=20.0.0.3\AndroidSDKPrivateInstall.ps1"
[1378:0012][2018-10-08T14:09:03] BEGIN: Verifying "AndroidImage_ARM_API23,version=20.0.0.3\armeabi-v7a-23_r20.zip"
[1378:0012][2018-10-08T14:09:03] Authenticode verification returned 0x800b0003 for path: AndroidImage_ARM_API23,version=20.0.0.3\armeabi-v7a-23_r20.zip.
[1378:0012][2018-10-08T14:09:03] Retrying validation for: AndroidImage_ARM_API23,version=20.0.0.3\armeabi-v7a-23_r20.zip
[1378:000c][2018-10-08T14:09:03] Authenticode verification returned 0x800b0003 for path: AndroidImage_x86_API23,version=20.0.0.3\x86-23_r20.zip.

Você está olhando para o fluxo de log de uma instalação do Visual Studio onde o utilitário de linha de comando de instalação do Visual Studio está verificando todas as cargas de trabalho instaladas.

Às 13:26:26 cliquei dentro da janela do prompt de comando. A saída para tela pára até 14:09:03 quando eu tiver pressionado Enter para sair do modo "Mark".

Agora observe que depois de 13:26:26, o processo termina para verificar o hash x86-23_r20.zip, a mensagem " teve êxito. Hash: X " e reiniciar com outro arquivo às 14:09 : 03, a mensagem " BEGIN: Verificando" [..] AndroidSDKPrivateInstall.ps1 "

Durante a pausa, o Utilitário de linha de comando de instalação do Visual Studio concluiu a verificação do arquivo que estava sendo processado e, exatamente no momento em que o controle retornou ao console, iniciou um novo trabalho de verificação de hash.

    
por 08.10.2018 / 08:22