为什么intellij idea不立即杀死调试进程?

Why does intellij idea not kill the debug process immediately?

我正在使用 idea 2016.1.1 并且想知道为什么当我单击停止按钮时 idea 没有立即终止调试进程。

例如使用这段代码重现它

public class Main {

  public static void main(String[] args) {
    int i = 0;
    while (true) {
      i++;
      System.out.print("I'm still alive: ");
      System.out.println(i);
    }
  }
}

在循环开始之前设置一个断点。

启动调试会话,等待它中断并按红色停止按钮 (CTRL-F2)。

我希望进程立即停止并且它不会打印任何东西,但会打印:

"C:\Program Files\Java\jdk1.6.0_38\bin\java" ....
Connected to the target VM, address: '127.0.0.1:54394', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:54394', transport: 'socket'
I'm still alive: 1
I'm still alive: 2
I'm still alive: 3
I'm still alive: 4
...
I'm still alive: 319
I'm still alive: 320
I'm still alive: 321
I'm still alive: 
Process finished with exit code -1

为什么进程没有立即停止?

还有其他方法可以强制立即停止吗?

编辑

刚刚用 idea 14.1.5 试了一下。该过程按预期立即停止。好像是2016引入了一个bug。

到目前为止我的调查...

当 IDEA 启动一个 java 进程时,它使用主包装器。这个包装器启动一个守护线程,监听 ServerSocket 的命令。

IDEA 向该服务器套接字发送一个 STOP 信号。当服务器线程收到 STOP 信号时,它使用 System.exit(1).

存在 jvm

看来是IDEA从调试中恢复了JVM,然后发送了STOP信号。因此,在收到 STOP 信号之前,该过程将继续。

我在 https://youtrack.jetbrains.com/issue/IDEA-155007

打开了一个错误

错误 IDEA-155007 已在 2016.3 (163.7743.44) 中修复。我刚刚验证过了。

在调试会话期间按 Stop 时,
IntelliJ Idea 的默认行为是不立即杀死进程!.

但如果您需要更改此行为以立即终止调试进程
我认为这应该是默认行为:)

您可以通过设置激活它:
Settings > Build, Execution, Development > Debugger >