当命令提示符正在运行一个进程然后它被卡住并且进程也在休眠时,是否有人遇到过这种情况。然后,当我们Enter在 cmd 窗口中按下键时,该过程继续进行。
有没有办法避免这种情况?或者这可以处理吗?
其他答案都是错误的!Windows 控制台有一个单独的模式,称为“标记模式”,用于选择文本。在该模式下,屏幕将被冻结,文本将进入缓冲区,如果缓冲区已满,则正在运行的进程将被阻止
如果启用了快速编辑模式(默认情况下它在旧版 Windows 中被禁用但在 Windows 10 中启用)然后在控制台窗口内单击将激活标记模式并导致您观察到的结果
很容易意外单击控制台并停止命令。当您按下Enter或时Esc,所选文本将被复制到剪贴板并退出标记模式,因此该过程将再次运行。优先级在这里绝对无关紧要,因为如果缓冲区已满,那么无论优先级如何,进程都会永远阻塞,直到您退出标记模式。当有一些输入时,控制台不会更改优先级。尝试以最高优先级打开一个输出大量数据的应用程序,然后点击控制台,即使CPU处于空闲状态,该应用程序仍然会无限期阻塞
以下是 Windows 8 控制台中 QuickEdit 模式设置的示例:
要解决此问题,您可以在不需要时禁用快速编辑模式。在这种情况下,复制会比较麻烦,因为您必须打开上下文菜单,选择Edit > Mark。如果您正在编写自己的控制台应用程序ENABLE_QUICK_EDIT_MODE
,您还可以通过设置禁用 QuickEdit 模式SetConsoleMode()
如果其他进程正在占用所有周期并且具有更高的优先级,那么您的进程可能会停止。用户输入可能只是给它一个 prio 提升,所以它重新开始。有关详细信息,请参阅https://docs.microsoft.com/en-us/windows/win32/procthread/priority-boosts上的Microsoft Docs 。
今天在执行包含 TFSBuild 的批处理文件时发生在我身上。我已经收到了来自 TFSBuild 的电子邮件通知它是成功的,但是不知何故批处理文件没有进入下一行。
我等了1个小时。我按下了 Enter 键、Mark for Edit 等,但这些都不起作用。然后我点击Ctrl+C
尝试终止批处理文件。当被问及是否要终止时,我输入了N
. 奇怪的是,批处理文件在那之后继续。