17

当命令提示符正在运行一个进程然后它被卡住并且进程也在休眠时,是否有人遇到过这种情况。然后,当我们Enter在 cmd 窗口中按下键时,该过程继续进行。

有没有办法避免这种情况?或者这可以处理吗?

4

3 回答 3

18

其他答案都是错误的!Windows 控制台有一个单独的模式,称为“标记模式”,用于选择文本。在该模式下,屏幕将被冻结,文本将进入缓冲区,如果缓冲区已满,则正在运行的进程将被阻止

标记模式

如果启用了快速编辑模式(默认情况下它在旧版 Windows 中被禁用在 Windows 10 中启用)然后在控制台窗口内单击将激活标记模式并导致您观察到的结果

很容易意外单击控制台并停止命令。当您按下Enter或时Esc,所选文本将被复制到剪贴板并退出标记模式,因此该过程将再次运行。优先级在这里绝对无关紧要,因为如果缓冲区已满,那么无论优先级如何,进程都会永远阻塞,直到您退出标记模式。当有一些输入时,控制台不会更改优先级。尝试以最高优先级打开一个输出大量数据的应用程序,然后点击控制台,即使CPU处于空闲状态,该应用程序仍然会无限期阻塞

以下是 Windows 8 控制台中 QuickEdit 模式设置的示例:

命令

要解决此问题,您可以在不需要时禁用快速编辑模式。在这种情况下,复制会比较麻烦,因为您必须打开上下文菜单,选择Edit > Mark。如果您正在编写自己的控制台应用程序ENABLE_QUICK_EDIT_MODE,您还可以通过设置禁用 QuickEdit 模式SetConsoleMode()

也可以看看

于 2020-06-03T03:06:27.127 回答
2

如果其他进程正在占用所有周期并且具有更高的优先级,那么您的进程可能会停止。用户输入可能只是给它一个 prio 提升,所以它重新开始。有关详细信息,请参阅https://docs.microsoft.com/en-us/windows/win32/procthread/priority-boosts上的Microsoft Docs 。

于 2012-12-02T18:25:04.247 回答
1

今天在执行包含 TFSBuild 的批处理文件时发生在我身上。我已经收到了来自 TFSBuild 的电子邮件通知它是成功的,但是不知何故批处理文件没有进入下一行。

我等了1个小时。我按下了 Enter 键、Mark for Edit 等,但这些都不起作用。然后我点击Ctrl+C尝试终止批处理文件。当被问及是否要终止时,我输入了N. 奇怪的是,批处理文件在那之后继续。

于 2020-10-05T05:53:05.700 回答