Ada*_*old 54 windows-7 command-line
假设我运行cmd.exe并 ping localhost。之后我再次 ping localhost 但我点击进入窗口并且 ping 停止,直到我按下enter。
当我点击窗口时会发生什么?它是暂停进程还是其他什么?我附上了一张截图来澄清这个问题。
注意:我实际上并没有单击而是使用鼠标拖动,这会在窗口中创建一个白框,如屏幕截图所示。
编辑:进一步澄清:我真正想知道的是拖动窗口是否会停止 cmd 进程?
编辑:更多说明:我知道我正在使用快速编辑并按 Enter 复制我选择的内容。我不知道的是后台会发生什么。
Der*_*ler 60
单击“命令提示符”窗口后,控制台主机将不再允许写入输出。应用程序本身继续运行,但没有任何内容写入屏幕。
当然,只要只有一个线程,这和你的进程被冻结基本是一样的。由于单线程尝试在做更多工作之前写一些输出。
如果我运行ping -t localhost
并单击进入命令提示符窗口,则可以ping.exe
使用Process Explorer检查主线程的调用堆栈。
我们可以看到ping.exe
试图写一些输出。它write()
在 C 运行时库中调用。该函数有时会调用GetConsoleMode。看起来,该函数将检查用户当前是否处于标记模式并在需要时阻止执行。
我们可以通过检查ping
with Wireshark的行为来进一步证明这种行为
运行时,ping -t superuser.com
我们在 Wireshark 中看到以下输出:
现在,让我们在命令提示符中标记一个框。
突然间,Wireshark 中不再有 ping 记录。ping
不再发送任何数据包。
是的,让我们看看输出是否真的是这里的问题!让我们将输出定向到NUL
设备:
现在,不再有任何输出。我们现在可以整天在框中标记文本,数据包将记录在 Wireshark 中。
Joh*_*hnL 29
当您在 cmd.exe 窗口中选择一些文本时,该进程将在后台继续进行,直到下次写入标准输出(或 STDOUT,即 cmd.exe 窗口中显示的数据流)。
当您退出选择模式时,该过程将恢复正常。
您可以通过ping www.google.com -t
在 cmd.exe 窗口中键入内容并选择输出的某些区域来测试这一点。您会看到它暂停,当您取消选择时,输出将恢复。
编辑:根据 Fran 的评论,您可以使用诸如 Wireshark 之类的工具来查看在您进行选择后仍会发生活动,然后停止。
小智 6
那是因为窗口进入了标记模式。当您按下 Enter 键时,它会将选定的文本复制到剪贴板。据我所知,没有对此进行设置,所以当您单击窗口时,我不确定为什么会这样做。通常,您必须右键单击并点击“标记”。检查以确保没有键卡在键盘上。
小智 6
您的 CMD 窗口处于快速编辑模式,当您单击屏幕时会自动进入编辑模式。Enter 用于复制白框中的文本并退出编辑模式。
通常CMD只有在黑屏上右击选择Mark时才会进入编辑模式。
要恢复正常,请右键单击窗口的标题栏并选择“属性”,选择“选项”选项卡并取消选择“快速编辑模式”,然后单击“确定”。
归档时间: |
|
查看次数: |
18331 次 |
最近记录: |