如果我单击cmd的窗口,它到底能做什么?


45

假设我运行cmd.exe并ping本地主机。之后,我再次ping localhost,但是我单击进入窗口,并且ping停止,直到按Enter为止。

当我单击窗口时会发生什么?它会中止流程还是其他?我附上了屏幕截图,以澄清此问题。

注意:实际上,我并不是单击鼠标,而是使用鼠标拖动鼠标,这会在窗口中创建一个白框,如屏幕截图所示。

编辑:进一步说明:我真正想知道的是拖动窗口是否停止cmd进程?

编辑:更多说明:我知道我正在使用快速编辑,然后按Enter键复制我选择的内容。我不知道在后台会发生什么。

在此处输入图片说明


2
顺便说一句,你可以UserVoice的投票来获得这一行为改变:wpdev.uservoice.com/forums/...
卡尔·沃尔什

真好 我投票了。
亚当·阿罗德

投票只是将我带到404页
凯利·邦

1
更重要的是,这是如何关闭此可怕功能的方法stackoverflow.com/a/37578608/463967
艾伦·麦克唐纳

Answers:


27

当您在cmd.exe窗口中选择某些文本时,该过程将在后台进行,直到下一次写入标准输出(或STDOUT,即cmd.exe窗口中显示的数据流)为止。

退出选择模式后,该过程将照常恢复。

您可以通过ping www.google.com -t在cmd.exe窗口中键入并选择输出的某些区域来进行测试。您会看到它暂停,并且当您取消选择时,输出将恢复。

编辑:根据Fran的评论,您可以使用Wireshark之​​类的工具来查看选择之后,活动仍然发生,然后停止。


3
仅此一点并不能测试。您还需要运行Wireshark,并查看ICMP数据包是否停止发送。如果是这样,那么暂停该过程是正确的。如果不是,则不暂停该过程,并且仅对输出进行缓冲(直到缓冲区填满,否则该过程将被暂停或数据丢失)。
弗兰

1
我很确定@Fran是正确的-如果您在选择模式下等待了足够长的时间,不会一次出现一大堆输出吗?
Izkata 2012年

1
这让我很烦,但是我发现,如果您转到cmd窗口的属性,则可以取消选择“快速编辑模式”,并且不会通过在窗口中单击来进入选择模式。
Zitrax 2015年

2
@Zitrax是的,这样可以防止意外发生。我经常从命令窗口复制内容,所以我不这样做。(当然,实际上我用Consolez它没有这个问题)
JohnL

1
这称为“ 阻止 ” ...即:应用程序调用write()但卡住了。
阿蒂

50

一旦单击“命令提示符”窗口,控制台主机将不再允许写入输出。应用程序本身一直在运行,但是没有任何内容写入屏幕。

当然,只要只有一个线程,这基本上与冻结您的进程相同。由于单线程尝试在执行更多工作之前先写一些输出。

如果运行ping -t localhost并单击进入命令提示符窗口,则可以ping.exe使用Process Explorer检查主线程的调用堆栈。

在此处输入图片说明

我们可以看到ping.exe试图写一些输出。它write()在C运行时库中调用。该函数有时会调用GetConsoleMode。看起来,该函数将检查用户当前是否处于标记模式,并在需要时阻止执行。

进一步分析

我们可以通过检查的行为,进一步证明这种行为pingWireshark的

运行时,ping -t superuser.com我们在Wireshark中看到以下输出:
在此处输入图片说明

现在,让我们在命令提示符下标记一个框。
在此处输入图片说明
突然,Wireshark中不再记录ping。ping不再发送任何数据包。

但是我们已经知道...

是的,让我们看看输出实际上是否是这里的问题!让我们将输出定向到NUL设备:

在此处输入图片说明

现在,不再有输出。现在,我们可以整天在框中标记文本,数据包将记录在Wireshark中。

在此处输入图片说明


如果我还没有为原始答案+1,我现在将为“进一步分析” +1
JohnL 2012年

6

这是因为窗口已进入标记模式。当您按Enter键时,它将选择的文本复制到剪贴板。据我所知,对此没有设置,因此,我不确定为什么当您单击窗口时会这样做。通常,您必须右键单击并单击“标记”。检查以确保键盘上没有按键卡住。


“标记模式”有什么作用?它会中止过程吗?
亚当·阿罗德

标记模式用于从命令窗口复制文本。AFAIK是唯一的用途,尽管我想可能还有其他用途。
加勒特2012年

7
该设置称为快速编辑模式。单击左上角的图标,选择“属性”,然后在“选项”选项卡上选择“快速编辑模式”。据我所知,该过程将在后台继续进行,直到需要与控制台进行交互为止,此时该过程将被阻止
JohnL 2012年

@JohnL请创建一个答案,因为您的评论就是我想要的。
亚当·阿罗德

@edem增加了一个答案:)
JohnL

6

您的CMD窗口处于快速编辑模式,当您单击屏幕时,它将自动进入编辑模式。Enter键用于复制白框中的文本并退出编辑模式。

通常,CMD仅在右键单击黑屏并选择“标记”时才进入编辑模式。

要恢复正常,请右键单击窗口的标题栏,然后选择“属性”,选择“选项”选项卡,然后取消选择“快速编辑模式”,然后单击“确定”。


3

当您从窗口中选择要复制的文本时(在Mark模式下),系统会在该窗口中挂起当前进程。

批处理文件示例:

:test
echo %0
goto test

运行此命令后,一旦我标记了要复制的区域,屏幕就会停止滚动


我正要发布完全相同的内容(除了我的批处理文件是echo blah↵%0)。:-)
Synetech

1

正如每个人都很好地指出的那样,在进行标记操作时会阻止附加输出的进度。同样,使用鼠标的交替单击(默认情况下为右键单击)或通过按键盘上的Enter键,您可以退出标记模式并将标记的选择复制到Windows的粘贴缓冲区中。还有另一种方法,那就是按Esc键放弃标记屏幕区域并释放输出上的块。假定您在该命令窗口的属性中选择了“快速编辑”模式。您还可以通过告诉命令窗口您要选择一些文本来更加有意地进入这种情况。


0

为了进一步证实该过程在“标记模式”下暂停的声明(例如,在鼠标单击或在cmd.exe窗口边框内拖动时),但仅在实例完全完成后才暂停任何操作,我提供了间接证明:

[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.

您正在查看Visual Studio安装的日志记录流,其中Visual Studio安装程序命令行实用程序正在验证所有已安装的工作负载。

在13:26:26,我单击了命令提示符窗口中的内部。当我按Enter键退出“标记模式”时,“输出到屏幕”将暂停到14:09:03。

现在请注意,在13:26:26之后,该过程完成以检查x86-23_r20.zip哈希,消息“ 成功。哈希:X ”并在14:09:03重新启动另一个文件,消息为“ BEGIN:正在验证” [..] AndroidSDKPrivateInstall.ps1

在暂停期间,Visual Studio安装程序命令行实用程序结束了对正在处理的文件的验证,并且恰好在将控件返回到控制台时,开始了新的哈希检查工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.