Supongamos que ejecuto cmd.exe y hago ping a localhost. Después de eso hago ping localhost nuevamente pero hago clic en la ventana y el ping se detiene hasta que presiono enter .
¿Qué sucede exactamente cuando hago clic en la ventana? ¿Suspende el proceso o algo más? Adjunto una captura de pantalla para aclarar este problema.
Nota: en realidad no hago clic, pero arrastro con el mouse, lo que crea un cuadro blanco en la ventana, como puede ver en la captura de pantalla.
Editar: más aclaraciones: lo que realmente deseo saber es si arrastrar la ventana detiene el proceso cmd o no.
Editar: aún más aclaraciones: sé que estoy usando Edición rápida y presionando Intro copia el contenido que seleccioné. Lo que no sé es lo que sucede en el fondo.
windows-7
command-line
Adam Arold
fuente
fuente
Respuestas:
Cuando selecciona algún texto en la ventana cmd.exe, el proceso continuará en segundo plano hasta la próxima vez que escriba en Salida estándar (o STDOUT, el flujo de datos que se muestra en la ventana cmd.exe).
Cuando salga del modo de selección, el proceso se reanudará normalmente.
Puede probar esto escribiendo
ping www.google.com -t
en su ventana cmd.exe y seleccionando alguna área de la salida. Verá que se detiene, y cuando anule la selección, la salida se reanudará.Editar: según el comentario de Fran, puede usar una herramienta como Wireshark para ver que la actividad todavía ocurre después del punto en que realizó la selección, y luego se detiene.
fuente
write()
pero se atasca.Una vez que haga clic en la ventana del símbolo del sistema, el host de la consola ya no permitirá que se escriba la salida. La aplicación en sí sigue ejecutándose, pero no se escribe nada en la pantalla.
Por supuesto, siempre que haya un solo hilo, esto es básicamente lo mismo que congelar su proceso. A medida que el hilo único intenta escribir algo de salida antes de hacer más trabajo.
Si ejecuto
ping -t localhost
y hago clic en la ventana del símbolo del sistema, puedo inspeccionar la pila de llamadas delping.exe
hilo principal con Process Explorer .Podemos ver que
ping.exe
trató de escribir alguna salida. Llamówrite()
a la biblioteca de tiempo de ejecución C. Esa función, en algún momento, llama a GetConsoleMode . Como parece, esa función verificará si el usuario está actualmente en modo de marca y bloqueará la ejecución si es necesario.Análisis mas extenso
Podemos probar aún más este comportamiento examinando el comportamiento de
ping
con WiresharkCuando se ejecuta
ping -t superuser.com
, vemos el siguiente resultado en Wireshark:Ahora, marquemos un cuadro en el símbolo del sistema.
De repente, no se registran más pings en Wireshark.
ping
ya no está enviando ningún paquete.Pero eso ya lo sabiamos...
Bien, ¡veamos si la salida es realmente el problema aquí! Dirigamos la salida al
NUL
dispositivo:Ahora, ya no hay ninguna salida. Ahora podemos marcar el texto en el cuadro durante todo el día, los paquetes se registrarán en Wireshark.
fuente
Esto se debe a que la ventana ha entrado en el modo Marca. Cuando presiona Intro, copia el texto seleccionado en el portapapeles. Que yo sepa, no hay una configuración para esto, por lo que no estoy seguro de por qué lo hace cuando hace clic en la ventana. Normalmente tienes que hacer clic derecho y presionar "Marcar". Verifique para asegurarse de que no haya teclas atascadas en su teclado.
fuente
Su ventana CMD está en modo de edición rápida que ingresa automáticamente al modo de edición cuando hace clic en la pantalla. La entrada es para copiar el texto en el cuadro blanco y salir del modo de edición.
Normalmente, CMD solo ingresa al modo de edición cuando hace clic derecho en la pantalla negra y selecciona Marcar.
Para volver a la normalidad, haga clic derecho en la barra de título de las ventanas y elija Propiedades, seleccione la pestaña Opciones y deseleccione "Modo de edición rápida" y haga clic en Aceptar.
fuente
Cuando selecciona el texto para copiar desde la ventana (cuando está en
Mark
modo), el sistema suspende el proceso actual en esa ventana.Ejemplo de archivo por lotes:
cuando se ejecuta esto, tan pronto como marco el área para copiar, la pantalla deja de desplazarse
fuente
echo blah↵%0
).:-)
Como todos han señalado tan amablemente, el progreso de la salida adicional se bloquea mientras una operación de marca está en progreso. Además, ya sea usando el clic alternativo del mouse (clic derecho por defecto) o presionando la tecla Enter en su teclado, puede salir del modo Marcar y copiar la selección marcada en el búfer de pegado de Windows. Hay otra salida y es presionar la tecla Esc para abandonar el marcado de un área de pantalla y liberar el bloque en la salida. Esto supone que tiene seleccionado el modo QuickEdit en las propiedades de esa ventana de comandos. También puede entrar en esta situación más deliberadamente diciéndole a la ventana de comandos que desea seleccionar algún texto.
fuente
Para corroborar aún más la afirmación de que el proceso se detiene en el "modo Marca", por ejemplo, al hacer clic con el mouse o arrastrar dentro de los bordes de la ventana cmd.exe, pero detiene cualquier operación solo después de terminar completamente con la instancia en progreso, ofrezco una prueba indirecta:
Está viendo la secuencia de registro de una instalación de Visual Studio donde la utilidad de línea de comandos de instalación de Visual Studio está verificando todas las cargas de trabajo instaladas.
A las 13:26:26 hice clic en el interior de la ventana del símbolo del sistema. La salida a la pantalla se detiene hasta las 14:09:03 cuando presiono Enter para salir del "modo Mark".
Ahora observe que después de las 13:26:26, el proceso termina de verificar el hash x86-23_r20.zip, el mensaje " tuvo éxito. Hash: X " y reinicie con otro archivo a las 14:09:03, el mensaje " COMIENZO: Verificando" [..] AndroidSDKPrivateInstall.ps1 "
Durante la pausa, Visual Studio Setup Command Line Utility concluyó la verificación del archivo que se estaba procesando y, exactamente en el momento en que el control debía devolverse a la consola, comenzó un nuevo trabajo de comprobación de hash.
fuente