【问题标题】:Command prompt gets stuck and continues on enter key press命令提示符卡住并继续按 Enter 键
【发布时间】:2012-11-15 23:51:40
【问题描述】:

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

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

【问题讨论】:

  • 是否存在需要用户输入的进程?一种可能的解决方案是使用 echo SOMETHING | the_process 调用它
  • 不,它是一个正在运行以接受一些请求的 JVM 进程。哪些是听众。

标签: windows cmd console


【解决方案1】:

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

如果启用了快速编辑模式(默认为disabled in older Windowsenabled in Windows 10),则在控制台窗口内单击将激活标记模式并产生您观察到的结果

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

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

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

另见

【讨论】:

  • 这是正确的!我一直在使用 Powershell 运行进程时遇到这个问题。取消选中快速编辑和插入模式为我解决了这个问题。
【解决方案2】:

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

【讨论】:

  • 向应用程序提供输入时没有优先级提升
  • 由于其他进程的高 CPU 使用率而导致所有输入都卡住的情况极为罕见。请阅读 OP 的说明:并且进程也在休眠。进程不能因为其他进程占用CPU多就休眠,只能抢占不能阻塞
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多