我最近遇到了Windows上的命令提示符问题,其中启用了QuickEdit模式,单击窗口选择文本并挂起正在运行的程序。这显然是已知的行为 - 我发现了一些与之相关的问题:
应用程序如何暂停" /"暂停"?该过程是否类似于* nix上的SIGSTOP
信号? (我也有兴趣了解为什么这个功能首先存在?看起来不直观且危险。)
答案 0 :(得分:47)
这非常符合设计。当程序不断滚动控制台窗口的内容时,用户无法选择文本。因此,控制台宿主程序只是停止读取stdout / stderr输出,程序会挂起,直到用户完成操作。这可以更改,您必须致电Get+SetConsoleMode()并关闭ENABLE_QUICK_EDIT_MODE选项。
注意这个"挂起"当程序以远高于控制台主机可以使用它的速率生成stdout输出时,您所获得的执行暂停与根本不同。虽然这些延误是有限的。
并且它不是用户停止程序的唯一方式,他也可以简单地按Ctrl + S.按Ctrl + Q会再次恢复。如果您的年龄足够大,那么您可能会将这些控制代码识别为Xon/Xoff,即终端的握手字符。这就是控制台的真正含义,是对终端的简单模拟,就像它们在20世纪70年代的使用方式一样。这也可以改变,你必须停止依赖内置的缓冲控制台输入并切换到ReadConsole()。或者通过关闭ENABLE_LINE_INPUT控制台选项,不确定自从您没有提及任何语言运行时的副作用,您必须尝试。
当然,终止你的程序非常容易。当用户键入Ctrl + Z时,您将在stdin上获得EOF,这应该结束您的程序。无论您的程序在做什么,都可以通过Ctrl + C和Ctrl + Break进行即时终止。您可以使用SetConsoleCtrlHandler()获取相关通知,但无法阻止。
如果默认行为危险并冒着人类健康的风险,那么我强烈建议您聘请顾问。并且不知道是谁写了这个答案。
答案 1 :(得分:0)