【问题标题】:What really happens when the a program is paused by Edit>Mark from the command line?当程序被命令行中的 Edit>Mark 暂停时,到底会发生什么?
【发布时间】:2013-03-27 09:52:18
【问题描述】:

在 Windows 中从命令行运行程序时,如果进入标记模式,则程序输出会暂停,让您有足够的时间复制所需内容,然后继续执行程序。

我一直认为这只是暂停了输出流,并且程序无论如何都继续落后。但是,我发现它似乎也“暂停”了程序(或至少阻止它通过套接字进行通信)。

我的问题是:这种“暂停”实际上意味着什么?哪些线程被挂起?子进程是否暂停(我猜不是)?例如,如果运行 Java 代码,是整个 JVM 暂停,还是只是主线程? Windows 是如何处理这个问题的?

如果这个问题可能有点开放式的问题,我深表歉意,但在开启快速编辑模式后,我想知道关键程序有什么风险!

提前致谢

【问题讨论】:

  • 您确定通过套接字进行通信的线程没有也尝试写入控制台吗?
  • 所有的日志记录都是用 NLog 处理的,在有问题的程序中没有任何直接的控制台访问。假设 Nlog 在单独的线程上运行,那么这应该会影响它。
  • 听起来这是您应该验证的假设。我会尝试编写一个简短但完整的程序来演示这个问题......

标签: windows multithreading jvm cmd


【解决方案1】:

在控制台窗口中选择文本将阻塞标准输出管道。这意味着当一个线程尝试写入标准输出时,它也会阻塞,直到管道中的所有数据都被读取并且一切都再次开始移动。

这不会阻塞任何其他线程或子进程。

您可以使用GetConsoleSelectionInfo 查看用户是否选择了文本,并可能警告他们或采取其他措施。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多